Skip to content

Commit

Permalink
transmission between relays not working
Browse files Browse the repository at this point in the history
  • Loading branch information
1majom committed Jul 8, 2024
1 parent d7a9183 commit 51e19af
Show file tree
Hide file tree
Showing 9 changed files with 114 additions and 73 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ export CAROOT ?= $(shell cd dev ; go run filippo.io/mkcert -CAROOT)

.PHONY: run
run: dev/localhost.crt
@./gen_compose.sh old
@./gen_compose.sh
@docker-compose up --build --remove-orphans

dev/localhost.crt:
Expand Down
2 changes: 1 addition & 1 deletion dev/cert
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,4 @@ go run filippo.io/mkcert -ecdsa -install
# Generate a new certificate for localhost
# This fork of mkcert supports the -days flag.
# TODO remove the -days flag when Chrome accepts self-signed certs.
go run filippo.io/mkcert -ecdsa -days 10 -cert-file "$CRT" -key-file "$KEY" localhost 127.0.0.1 ::1 relay1 relay2 relay4443 relay4441 relay4442
go run filippo.io/mkcert -ecdsa -days 10 -cert-file "$CRT" -key-file "$KEY" localhost 127.0.0.1 ::1 relay1 relay2 relay4441 relay4442 relay4443 relay4444 relay4445
4 changes: 2 additions & 2 deletions dev/topos/topo_line.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
nodes:
- 4443
- 4444
- 4442
- 4441

edges:
- - 4441
- 4444
- 4442
- - 4443
- 4441
8 changes: 4 additions & 4 deletions dev/topos/topo_old.yaml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
nodes:
- localhost4441
- localhost4442
- relay1
- relay2

edges:
- - localhost4441
- localhost4442
- - relay1
- relay2
16 changes: 8 additions & 8 deletions docker-compose-old.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,27 +27,27 @@ services:
ports:
- "80"

relay4441:
relay1:
<<: *x-moq
entrypoint: moq-relay
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://localhost:4441 --dev --announce https://dir
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://relay1 --dev --announce https://dir
depends_on:
- api
- dir
ports:
- "4441:4441"
- "4441:4441/udp"
- "4443:443"
- "4443:443/udp"

relay4442:
relay2:
<<: *x-moq
entrypoint: moq-relay
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://localhost:4442 --dev --announce https://dir
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://relay2 --dev --announce https://dir
depends_on:
- api
- dir
ports:
- "4442:4442"
- "4442:4442/udp"
- "4444:443"
- "4444:443/udp"

dir:
<<: *x-moq
Expand Down
65 changes: 48 additions & 17 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ version: "3.8"
x-moq: &x-moq
build: .
environment:
RUST_LOG: ${RUST_LOG:-debug}
RUST_LOG: debug
volumes:
- ./dev/localhost.crt:/etc/tls/cert:ro
- ./dev/localhost.key:/etc/tls/key:ro
Expand All @@ -16,7 +16,7 @@ services:
redis:
image: redis:7
ports:
- "6379"
- "6400:6379"

api:
<<: *x-moq
Expand All @@ -26,35 +26,66 @@ services:
command: --redis redis://redis:6379 --topo-path topo.yaml
ports:
- "80"

dir:
<<: *x-moq
entrypoint: moq-dir
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key
ports:
- "443/udp"
relay4441:
<<: *x-moq
entrypoint: moq-relay
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://localhost:4441 --dev --announce https://dir
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://relay4441 --dev --announce https://dir
depends_on:
- api
- dir
ports:
- "4441:4441"
- "4441:4441/udp"
- "4441:443"
- "4441:443/udp"

relay4442:
<<: *x-moq
entrypoint: moq-relay
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://localhost:4442 --dev --announce https://dir
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://relay4442 --dev --announce https://dir
depends_on:
- api
- dir
ports:
- "4442:4442"
- "4442:4442/udp"
- "4442:443"
- "4442:443/udp"

dir:
relay4443:
<<: *x-moq
entrypoint: moq-dir
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key
entrypoint: moq-relay
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://relay4443 --dev --announce https://dir
depends_on:
- api
- dir
ports:
- "443/udp"
- "4443:443"
- "4443:443/udp"

relay4444:
<<: *x-moq
entrypoint: moq-relay
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://relay4444 --dev --announce https://dir
depends_on:
- api
- dir
ports:
- "4444:443"
- "4444:443/udp"

relay4445:
<<: *x-moq
entrypoint: moq-relay
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://relay4445 --dev --announce https://dir
depends_on:
- api
- dir
ports:
- "4445:443"
- "4445:443/udp"

install-certs:
image: golang:latest
Expand All @@ -63,10 +94,10 @@ services:
environment:
CAROOT: /work/caroot
volumes:
- ${CAROOT:-.}:/work/caroot
- certs:/etc/ssl/certs
- ./dev/go.mod:/work/go.mod:ro
- ./dev/go.sum:/work/go.sum:ro
- ${CAROOT:-.}:/work/caroot
- certs:/etc/ssl/certs
- ./dev/go.mod:/work/go.mod:ro
- ./dev/go.sum:/work/go.sum:ro

volumes:
certs:
58 changes: 35 additions & 23 deletions gen_compose.sh
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,19 @@
topology_file=$1

if [ -z "$topology_file" ]; then
read -p "Please enter topo: " middle_part
allowed_topologies="spineleaf line star"

if [[ " $allowed_topologies " =~ " $middle_part " ]]; then
topology_file="dev/topos/topo_${middle_part}.yaml"
else
echo "Invalid topology: $middle_part. Allowed values are $allowed_topologies."
exit 1
fi
read -p "Please enter topo: " middle_part
allowed_topologies="spineleaf line star"

if [[ " $allowed_topologies " =~ " $middle_part " ]]; then
topology_file="dev/topos/topo_${middle_part}.yaml"
else
echo "Invalid topology: $middle_part. Allowed values are $allowed_topologies."
exit 1
fi
fi

if [ "$topology_file" == "old" ]; then
cp dev/topos/topo_old.yaml topo.yaml
cp dev/topos/topo_old.yaml topo.yaml
cp docker-compose-old.yml docker-compose.yml
echo "Using old docker-compose configuration."
exit 0
Expand All @@ -30,15 +30,14 @@ cp $topology_file topo.yaml
cat << EOF > docker-compose.yml
version: "3.8"
x-relay: &x-relay
x-moq: &x-moq
build: .
entrypoint: ["moq-relay"]
environment:
RUST_LOG: \${RUST_LOG:-debug}
RUST_LOG: ${RUST_LOG:-debug}
volumes:
- ./dev/localhost.crt:/etc/tls/cert:ro
- ./dev/localhost.key:/etc/tls/key:ro
- certs:/etc/ssl/certs
- ./dev/localhost.crt:/etc/tls/cert:ro
- ./dev/localhost.key:/etc/tls/key:ro
- certs:/etc/ssl/certs
depends_on:
install-certs:
condition: service_completed_successfully
Expand All @@ -50,21 +49,34 @@ services:
- "6400:6379"
api:
build: .
<<: *x-moq
entrypoint: moq-api
volumes:
- ./topo.yaml:/topo.yaml:ro
entrypoint: moq-api
command: --listen [::]:4440 --redis redis://redis:6379 --topo-path topo.yaml
command: --redis redis://redis:6379 --topo-path topo.yaml
ports:
- "80"
dir:
<<: *x-moq
entrypoint: moq-dir
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key
ports:
- "443/udp"
EOF

for relay in "${relays[@]}"; do
cat << EOF >> docker-compose.yml
relay${relay}:
<<: *x-relay
command: --listen [::]:${relay} --tls-cert /etc/tls/cert --tls-key /etc/tls/key --api http://api:4440 --api-node https://localhost:${relay} --dev
<<: *x-moq
entrypoint: moq-relay
command: --tls-cert /etc/tls/cert --tls-key /etc/tls/key --tls-disable-verify --api http://api --node https://relay${relay} --dev --announce https://dir
depends_on:
- api
- dir
ports:
- "${relay}:${relay}"
- "${relay}:${relay}/udp"
- "${relay}:443"
- "${relay}:443/udp"
EOF
done

Expand Down
30 changes: 14 additions & 16 deletions moq-api/src/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,32 +122,31 @@ async fn set_origin(
) -> Result<(), AppError> {

let topo: Topology = serde_yaml::from_str(&state.topo).map_err(|_| AppError::Parameter(url::ParseError::IdnaError))?;
if !topo.nodes.contains(&relayid) {
if !topo.nodes.contains(&relayid.replace("relay", "")) {
log::warn!("!!!not the expected publisher relay {}", relayid);
return Err(AppError::Parameter(url::ParseError::IdnaError));
}

let mut preinfo: Vec<(u16, u16)> = Vec::new();
let mut preinfo: Vec<(String, String)> = Vec::new();
let mut queue: VecDeque<String> = VecDeque::new();
let mut visited: HashSet<String> = HashSet::new();

queue.push_back(relayid.clone());
visited.insert(relayid.clone());
queue.push_back(relayid.replace("relay","").clone());
visited.insert(relayid.replace("relay","").clone());

log::info!("relay_info: {:?}", queue);
log::info!("relay_info: {:?}", topo.edges);


// Getting the edges that will be used for that exact relayid
while let Some(node) = queue.pop_front() {
for (from, to) in &topo.edges {
if from == &node && !visited.contains(to) {
let from_u32 = from.parse().unwrap();
let to_u32 = to.parse().unwrap();
preinfo.push((to_u32, from_u32));
preinfo.push((to.to_string(), from.to_string()));
queue.push_back(to.clone());
visited.insert(to.clone());
} else if to == &node && !visited.contains(from) {
let from_u32 = from.parse().unwrap();
let to_u32 = to.parse().unwrap();
preinfo.push((from_u32, to_u32));
preinfo.push((from.to_string(), to.to_string()));
queue.push_back(from.clone());
visited.insert(from.clone());
}
Expand All @@ -156,20 +155,19 @@ async fn set_origin(

//for docker reasons right now we have to provide the hostname also
let mut relay_info: Vec<(String, String, u16)> = Vec::new();
for &(src, dest) in &preinfo {
relay_info.push((src.to_string(), format!("relay{}", dest), dest));
for (src, dest) in preinfo {
relay_info.push((src.to_string(), "relay".to_owned()+&dest.clone(), dest.clone().replace("relay", "").parse().unwrap()));
}



for (src_key_id, dst_host, dst_port) in relay_info.into_iter() {
let key = origin_key(&namespace, &src_key_id);
let mut url = Url::parse(&origin.url.to_string()).unwrap();
println!("url: {:?}", url);
let _ = url.set_port(Some(dst_port));
let _ = url.set_host(Some(dst_host.as_str()));

println!("url: {:?}", url);
let _ = url.set_port(Some(dst_port));
let _ = url.set_host(Some(&dst_host));


let new_origin = Origin {
url: Url::parse(&url.to_string()).unwrap(),
Expand Down
2 changes: 1 addition & 1 deletion moq-relay/src/api.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ pub struct Api {
impl Api {
pub fn new(url: Url, node: Url) -> Self {
let origin = moq_api::Origin { url: node.clone() };
let client: moq_api::Client = moq_api::Client::new(url, &(node).as_str().replace(":", "").replace("/", ""));
let client: moq_api::Client = moq_api::Client::new(url, &(node).as_str().replace("https://", "").replace(":", "_").replace("/", ""));

Self { client, origin }
}
Expand Down

0 comments on commit 51e19af

Please sign in to comment.