Skip to content

Commit

Permalink
Group connection works now
Browse files Browse the repository at this point in the history
  • Loading branch information
maxsharabayko committed Nov 5, 2020
1 parent e62539b commit e50b490
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 31 deletions.
48 changes: 28 additions & 20 deletions xtransmit/receive.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -138,9 +138,19 @@ void run_pipe(shared_sock src, const config &cfg, const atomic_bool &force_break
}
}

void xtransmit::receive::run(const string &src_url, const config &cfg, const atomic_bool &force_break)
void xtransmit::receive::run(const vector<string> &src_urls, const config &cfg, const atomic_bool &force_break)
{
const UriParser uri(src_url);
if (src_urls.empty())
{
spdlog::error(LOG_SC_RECEIVE "No destination URI was provided");
return;
}

vector<UriParser> urls;
for (const string& url : src_urls)
{
urls.emplace_back(url);
}

shared_sock socket;
shared_sock connection;
Expand All @@ -154,29 +164,27 @@ void xtransmit::receive::run(const string &src_url, const config &cfg, const ato
: nullptr;

do {
if (uri.proto() == "udp")
{
connection = make_shared<socket::udp>(uri);
}
else if (cfg.inputs.empty())
if (urls.size() == 1)
{
socket = make_shared<socket::srt>(uri);
socket::srt* s = static_cast<socket::srt*>(socket.get());
const bool accept = s->mode() == socket::srt::LISTENER;
if (accept)
s->listen();
connection = accept ? s->accept() : s->connect();
if (urls[0].proto() == "udp")
{
connection = make_shared<socket::udp>(urls[0]);
}
else
{
socket = make_shared<socket::srt>(urls[0]);
socket::srt* s = static_cast<socket::srt*>(socket.get());
const bool accept = s->mode() == socket::srt::LISTENER;
if (accept)
s->listen();
connection = accept ? s->accept() : s->connect();
}
}
else
{
vector<UriParser> urls;
urls.push_back(src_url);
for (auto u : cfg.inputs)
urls.push_back(u);

socket = make_shared<socket::srt_group>(urls);
socket = make_shared<socket::srt_group>(urls);
socket::srt_group* s = static_cast<socket::srt_group*>(socket.get());
const bool accept = s->mode() == socket::srt_group::LISTENER;
const bool accept = s->mode() == socket::srt_group::LISTENER;
if (accept)
s->listen();
connection = accept ? s->accept() : s->connect();
Expand Down
2 changes: 1 addition & 1 deletion xtransmit/receive.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ namespace xtransmit {



void run(const std::string& url, const config& cfg,
void run(const std::vector<std::string>& urls, const config& cfg,
const std::atomic_bool& force_break);

CLI::App* add_subcommand(CLI::App& app, config& cfg, std::vector<std::string>& src_urls);
Expand Down
13 changes: 4 additions & 9 deletions xtransmit/srt_socket_group.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,6 @@ socket::srt_group::srt_group(const vector<UriParser>& uris)
// Will throw an exception if invalid options were provided.
srt::assert_options_valid(m_options);

if (this->mode() == CALLER)
{
m_bind_socket = srt_create_group(SRT_GTYPE_BROADCAST);
}

// Create SRT socket group
if (m_mode == LISTENER)
{
Expand Down Expand Up @@ -154,7 +149,7 @@ void socket::srt_group::create_listeners(const vector<UriParser>& src_uri)
sockaddr_any sa = CreateAddr(url.host(), url.portno());

SRTSOCKET s = srt_create_socket();
if (m_bind_socket == SRT_INVALID_SOCK)
if (s == SRT_INVALID_SOCK)
throw socket::exception(srt_getlasterror_str());

int gcon = 1;
Expand All @@ -173,7 +168,7 @@ void socket::srt_group::create_callers(const vector<UriParser>& uris)
{
m_bind_socket = srt_create_group(SRT_GTYPE_BROADCAST);
if (m_bind_socket == SRT_INVALID_SOCK)
throw ;
raise_exception("srt_create_group");

for (const auto& uri :uris)
{
Expand Down Expand Up @@ -255,7 +250,7 @@ void socket::srt_group::release_targets()
shared_srt_group socket::srt_group::connect()
{
const int st = srt_connect_group(m_bind_socket, m_targets.data(), m_targets.size());
if (st != SRT_SUCCESS)
if (st == SRT_ERROR)
raise_exception("srt_group::connect");

release_targets();
Expand All @@ -265,7 +260,7 @@ shared_srt_group socket::srt_group::connect()
int socket::srt_group::configure_pre(SRTSOCKET sock)
{
int maybe = m_blocking_mode ? 1 : 0;
int result = srt_setsockopt(sock, 0, SRTO_RCVSYN, &maybe, sizeof maybe);
const int result = srt_setsockopt(sock, 0, SRTO_RCVSYN, &maybe, sizeof maybe);
if (result == -1)
return result;

Expand Down
2 changes: 1 addition & 1 deletion xtransmit/xtransmit-app.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -171,7 +171,7 @@ int main(int argc, char **argv)
{
cout << "URL: " << url << "\n";
}
xtransmit::receive::run(src, cfg_receive, force_break);
xtransmit::receive::run(src_urls, cfg_receive, force_break);
return 0;
}
else if (sc_route->parsed())
Expand Down

0 comments on commit e50b490

Please sign in to comment.