Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add browser to browser #22

Merged
merged 9 commits into from
Apr 10, 2023
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
feat: enabled reservation manager on browser node via circuitRelay + …
…added stun server + rtcDirect address filter
maschad committed Apr 5, 2023

Verified

This commit was signed with the committer’s verified signature.
maschad Chad Nehemiah
commit 117e1606f0ec32ba164427e3dbd656b30e12830b
4 changes: 4 additions & 0 deletions packages/frontend/src/lib/constants.ts
Original file line number Diff line number Diff line change
@@ -2,3 +2,7 @@ export const CHAT_TOPIC = "universal-connectivity"

// export const DEFAULT_APP_PEER = '12D3KooWBdmLJjhpgJ9KZgLM3f894ff9xyBfPvPjFNn7MKJpyrC2'
export const DEFAULT_APP_PEER = '12D3KooWRBy97UB99e3J6hiPesre1MZeuNQvfan4gBziswrRJsNK'


export const CIRCUIT_RELAY_CODE = 290
export const WEBRTC_CODE = 281
48 changes: 46 additions & 2 deletions packages/frontend/src/lib/libp2p.ts
Original file line number Diff line number Diff line change
@@ -23,7 +23,12 @@ import { webSockets } from '@libp2p/websockets'
import { webTransport } from '@libp2p/webtransport'
import { webRTC, webRTCDirect } from '@libp2p/webrtc'
import { PeerId } from 'kubo-rpc-client/dist/src/types'
import { CHAT_TOPIC } from './constants'
import { CHAT_TOPIC, CIRCUIT_RELAY_CODE, WEBRTC_CODE } from './constants'
import * as filters from "@libp2p/websockets/filters"

// @ts-ignore
import { circuitRelayTransport } from 'libp2p/circuit-relay'


export async function startLibp2p(options: {} = {}) {
// localStorage.debug = 'libp2p*,-*:trace'
@@ -43,7 +48,22 @@ export async function startLibp2p(options: {} = {}) {
const libp2p = await createLibp2p({
// dht: kadDHT(),
datastore,
transports: [webTransport(), webSockets(), webRTC(), webRTCDirect()],
transports: [webTransport(), webSockets({
filter: filters.all,
}), webRTC({
rtcConfiguration: {
iceServers:[
{
urls: [
'stun:stun.l.google.com:19302',
'stun:global.stun.twilio.com:3478'
]
}
]
}
}), webRTCDirect(), circuitRelayTransport({
discoverRelays: 1,
}),],
// transports: [webRTC()],
connectionEncryption: [noise()],
streamMuxers: [yamux()],
@@ -83,6 +103,11 @@ export async function startLibp2p(options: {} = {}) {

libp2p.pubsub.subscribe(CHAT_TOPIC)

libp2p.peerStore.addEventListener('change:multiaddrs', ({detail: {peerId, multiaddrs}}) => {
console.log(`changed multiaddrs: peer ${peerId} multiaddrs: ${multiaddrs}`)
setWebRTCDirectAddress(multiaddrs, peerId.toString())
})

console.log(`this nodes peerID: ${libp2p.peerId.toString()}`)

return libp2p
@@ -244,3 +269,22 @@ export class Libp2pDialError extends Error {
this.error = error
}
}

export const setWebRTCDirectAddress = (maddrs: Multiaddr[], peerId: string) => {
maddrs.forEach((maddr) => {
if (maddr.protoCodes().includes(CIRCUIT_RELAY_CODE)) {
if (maddr.protos().pop()?.name === 'p2p') {
maddr = maddr.decapsulateCode(protocols('p2p').code)
}

const webrtcDirectAddress = multiaddr(maddr.toString() + '/webrtc/p2p/' + peerId)

console.log(`Listening on '${webrtcDirectAddress.toString()}'`)
}
})
}


export const isWebrtc = (ma: Multiaddr) => {
return ma.protoCodes().includes(WEBRTC_CODE)
}
3 changes: 3 additions & 0 deletions packages/frontend/src/pages/index.tsx
Original file line number Diff line number Diff line change
@@ -11,6 +11,7 @@ import {
filterPublicMultiaddrs,
getPeerMultiaddrs,
Libp2pDialError,
setWebRTCDirectAddress,
} from '@/lib/libp2p'
import type { Multiaddr } from '@multiformats/multiaddr'
import { multiaddr } from '@multiformats/multiaddr'
@@ -93,6 +94,7 @@ export default function Home() {
const addrs = await getPeerMultiaddrs(libp2p)(peerID)

setMultiaddrs(addrs)

} catch (e) {
console.error(e)
}
@@ -143,6 +145,7 @@ export default function Home() {
try {
const connection = await connectToMultiaddr(libp2p)(multiaddr(maddr))
console.log('connection: ', connection)

return connection
} catch (e) {
console.error(e)
2 changes: 1 addition & 1 deletion rust-peer/src/main.rs
Original file line number Diff line number Diff line change
@@ -44,7 +44,7 @@ async fn main() -> Result<()> {
let opt = Opt::parse();

let mut swarm = create_swarm()?;
swarm.listen_on(format!("/ip4/0.0.0.0/udp/0/webrtc").parse()?)?;
swarm.listen_on(format!("/ip4/0.0.0.0/udp/0/webrtc-direct").parse()?)?;

if let Some(remote_address) = opt.remote_address {
swarm.dial(remote_address).unwrap();