UNPKG

@babblevoice/projectrtp

Version:
215 lines (158 loc) 5.46 kB
const projectrtp = require( "../../index.js" ).projectrtp const dgram = require( "dgram" ) /** * Use wireshark to copy->as hex stream for the input to this function to create a JS Buffer. * @param { string } str * @ignore */ function tobuffer( str ) { let hex = str.substring( 0,2 ) const res = [] while( hex ) { str = str.slice( 2 ) res.push( parseInt( hex, 16 ) ) hex = str.substring( 0,2 ) } return Buffer.from( res ) } describe( "STUN", function() { it( "Bind Request 1", async function() { const server = dgram.createSocket( "udp4" ) /* generated with chrome client with project, generated by chrome sent to us */ const stunpacket = tobuffer( "0001005c2112a442546a56583341484a6b5a457400060015393037643261663462313133306237653a2b394f41000000c0570004000003e7802a00081617d3f2124471b400250000002400046e001eff000800141dd53ef0e9774d2fbbad5c904327d2cecb0c161f802800042e8f2b6b" ) /* from chrome */ /* ice-pwd:EHF1KuU51q+m7U0o246kgM29 */ const chromeicepwd = "EHF1KuU51q+m7U0o246kgM29" /* from project */ const projecticepwd = "vjwMJC1QaQKkmddLFOWbtmIF" let done const finished = new Promise( ( r ) => { done = r } ) const channel = await projectrtp.openchannel( { "id": "4", "remote": { "address": "localhost", "port": 20000, "codec": 0, "icepwd": chromeicepwd }, "local": { "icepwd": projecticepwd /* override our generated one */ } }, ( d ) => { if( "close" === d.action ) done() } ) server.on( "message", function() { /* exit to show our test has passed */ server.close() channel.close() } ) server.bind() server.on( "listening", async function() { server.send( stunpacket, channel.local.port, "localhost" ) } ) await finished } ) it( "Bind Request 2", async function() { const fromchrome = "0001005c2112a4426977794337524e516367556500060015343635613064383863333238376336613a5a483651000000c0570004000003e7802a0008912756f47f66a6e200250000002400046e001eff000800140bcc9d77b7beabf7e63d32095423e527b2908aa380280004ca294ea6" const stunpacket = tobuffer( fromchrome ) /* from chrome */ const chromeicepwd = "oQBeaQ7QASCyv0qQQ+lxwQaE" /* from project */ const projecticepwd = "nxIUvOuFnrokdbuiloUXtK51" let done const finished = new Promise( ( r ) => { done = r } ) const channel = await projectrtp.openchannel( { "id": "4", "remote": { "address": "localhost", "port": 20000, "codec": 0, "icepwd": chromeicepwd }, "local": { "icepwd": projecticepwd /* override our generated one */ } }, ( d ) => { if( "close" === d.action ) done() } ) const server = dgram.createSocket( "udp4" ) server.on( "message", function() { /* exit to show our test has passed */ server.close() channel.close() } ) server.bind() server.on( "listening", async function() { server.send( stunpacket, channel.local.port, "localhost" ) } ) await finished } ) it( "Bind Response 1", async function() { /* Useful test to have - but nothing to test */ /* Binding request */ const chromeicepwd = "jNDi+HequKwI10yrrRVWwp9y" const projecticepwd = "46XDyTXBxaqr5zLGDl0c9khf" const ourresponse = "0101002c2112a44268725570544b537536656951002000080001f3cde1baa4cf00080014b775fbfe51ab48a871b6e4ca2adeaf63ceb823c480280004b0e3a47a" const stunpacket = tobuffer( ourresponse ) let done const finished = new Promise( ( r ) => { done = r } ) const channel = await projectrtp.openchannel( { "id": "4", "remote": { "address": "localhost", "port": 20000, "codec": 0, "icepwd": chromeicepwd }, "local": { "icepwd": projecticepwd /* override our generated one */ } }, (d ) => { if( "close" === d.action ) done() } ) const server = dgram.createSocket( "udp4" ) server.bind() server.on( "listening", async function() { server.send( stunpacket, channel.local.port, "localhost" ) } ) setTimeout( () => { server.close() channel.close() }, 200 ) await finished } ) it( "Bind Response 2", async function() { /* chrome - FS */ /* Binding request */ const chromeicepwd = "akNxwdQhePf2wiKw2+A2LF9A" const projecticepwd = "DShvmi9dnQ1WOQmvkTiX3oJv" const response = "0101002c2112a4426d553159356c616f374d4758002000080001bf6d73016a24000800143dd0c7760e54aef711d5a767b74211e4855f8c7780280004ad03a421" const stunpacket = tobuffer( response ) let done const finished = new Promise( ( r ) => { done = r } ) const channel = await projectrtp.openchannel( { "id": "4", "remote": { "address": "localhost", "port": 20000, "codec": 0, "icepwd": chromeicepwd }, "local": { "icepwd": projecticepwd /* override our generated one */ } }, ( d ) => { if( "close" === d.action ) done() } ) const server = dgram.createSocket( "udp4" ) server.bind() server.on( "listening", async function() { server.send( stunpacket, channel.local.port, "localhost" ) } ) setTimeout( () => { server.close() channel.close() }, 200 ) await finished } ) } )