@@ -3,7 +3,8 @@ import { noise } from '@chainsafe/libp2p-noise'
33import { yamux } from '@chainsafe/libp2p-yamux'
44import { perf } from '@libp2p/perf'
55import { tcp } from '@libp2p/tcp'
6- import { multiaddr } from '@multiformats/multiaddr'
6+ import { webSockets } from '@libp2p/websockets'
7+ import { multiaddr , fromStringTuples } from '@multiformats/multiaddr'
78import { createLibp2p } from 'libp2p'
89
910const argv = parseArgs ( {
@@ -15,10 +16,17 @@ const argv = parseArgs({
1516 'server-address' : {
1617 type : 'string'
1718 } ,
19+ 'server-multiaddr' : {
20+ type : 'string'
21+ } ,
1822 transport : {
1923 type : 'string' ,
2024 default : 'tcp'
2125 } ,
26+ encryption : {
27+ type : 'string' ,
28+ default : 'noise'
29+ } ,
2230 'upload-bytes' : {
2331 type : 'string' ,
2432 default : '0'
@@ -32,49 +40,79 @@ const argv = parseArgs({
3240
3341/**
3442 * @param {boolean } runServer
35- * @param {string } serverIpAddress
43+ * @param {string } serverPublicSocketAddress
44+ * @param {string } serverMultiaddr
3645 * @param {string } transport
46+ * @param {string } encryption
3747 * @param {number } uploadBytes
3848 * @param {number } downloadBytes
3949 */
40- export async function main ( runServer , serverIpAddress , transport , uploadBytes , downloadBytes ) {
41- const { host, port } = splitHostPort ( serverIpAddress )
50+ export async function main ( runServer , serverPublicSocketAddress , serverMultiaddr , transport , encryption , uploadBytes , downloadBytes ) {
51+ const { host, port } = splitHostPort ( serverPublicSocketAddress )
4252
4353 const config = {
44- transports : [
45- tcp ( )
46- ] ,
54+ addresses : { } ,
55+ transports : [ ] ,
4756 streamMuxers : [
4857 yamux ( )
4958 ] ,
5059 connectionEncryption : [
5160 noise ( )
5261 ] ,
53- connectionManager : {
54- minConnections : 0
55- } ,
5662 services : {
5763 perf : perf ( )
5864 }
5965 }
6066
67+ if ( transport === 'tcp' ) {
68+ config . transports = [
69+ tcp ( )
70+ ]
71+ } else if ( transport === 'ws' ) {
72+ config . transports = [
73+ webSockets ( )
74+ ]
75+ }
76+
6177 if ( runServer ) {
62- Object . assign ( config , {
63- addresses : {
64- listen : [
65- // #TODO: right now we only support tcp
66- `/ip4/${ host } /tcp/${ port } `
67- ]
68- }
69- } )
78+ if ( transport === 'tcp' ) {
79+ config . addresses . listen = [
80+ `/ip4/${ host } /tcp/${ port } `
81+ ]
82+ } else if ( transport === 'ws' ) {
83+ config . addresses . listen = [
84+ `/ip4/${ host } /tcp/${ port } /ws`
85+ ]
86+ }
7087 }
7188
7289 const node = await createLibp2p ( config )
7390
7491 await node . start ( )
7592
76- if ( ! runServer ) {
77- for await ( const output of node . services . perf . measurePerformance ( multiaddr ( `/ip4/${ host } /tcp/${ port } ` ) , uploadBytes , downloadBytes ) ) {
93+ if ( runServer ) {
94+ // print our multiaddr (may have certhashes in it)
95+ console . error ( node . getMultiaddrs ( ) [ 0 ] . toString ( ) )
96+ } else {
97+ // replace server host/port with values from public address
98+ const privateMa = multiaddr ( serverMultiaddr )
99+ const tuples = privateMa . stringTuples ( )
100+
101+ for ( let i = 0 ; i < tuples . length ; i ++ ) {
102+ // ipv4
103+ if ( tuples [ i ] [ 0 ] === 4 ) {
104+ tuples [ i ] [ 1 ] = host
105+ }
106+
107+ // udp
108+ if ( tuples [ i ] [ 0 ] === 6 || tuples [ i ] [ 0 ] === 273 ) {
109+ tuples [ i ] [ 1 ] = port
110+ }
111+ }
112+
113+ const serverMa = fromStringTuples ( tuples )
114+
115+ for await ( const output of node . services . perf . measurePerformance ( serverMa , uploadBytes , downloadBytes ) ) {
78116 // eslint-disable-next-line no-console
79117 console . log ( JSON . stringify ( output ) )
80118 }
@@ -101,7 +139,7 @@ function splitHostPort (address) {
101139 }
102140}
103141
104- main ( argv . values [ 'run-server' ] === 'true' , argv . values [ 'server-address' ] , argv . values . transport , Number ( argv . values [ 'upload-bytes' ] ) , Number ( argv . values [ 'download-bytes' ] ) ) . catch ( ( err ) => {
142+ main ( argv . values [ 'run-server' ] === 'true' , argv . values [ 'server-address' ] , argv . values [ 'server-multiaddr' ] , argv . values . transport , argv . values . encryption , Number ( argv . values [ 'upload-bytes' ] ) , Number ( argv . values [ 'download-bytes' ] ) ) . catch ( ( err ) => {
105143 // eslint-disable-next-line no-console
106144 console . error ( err )
107145 process . exit ( 1 )
0 commit comments