forked from nickdesaulniers/vs-stun
/
vs-stun.js
125 lines (83 loc) · 2.62 KB
/
vs-stun.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
var dgram = require('dgram');
var util = require('./lib/util');
var client = require('./lib/client');
var Packet = require('./lib/Packet');
var parse = exports.parse = function parse ( data ) {
return Packet.parse(data);
}
var create = exports.create = function create ( auth ) {
return new Packet(auth);
}
create.bindingRequest = function createBindingRequest ( auth ) {
var packet = new Packet(auth);
packet.type = Packet.BINDING_REQUEST;
return packet;
}
create.bindingSuccess = function createBindingSuccess ( auth ) {
var packet = new Packet(auth);
packet.type = Packet.BINDING_SUCCESS;
return packet;
}
create.bindingFailure = function createBindingFailure ( auth ) {
var packet = new Packet(auth);
packet.type = Packet.BINDING_FAILURE;
return packet;
}
create.sharedSecretRequest = function createShareSecretRequest ( auth ) {
var packet = new Packet(auth);
packet.type = Packet.SSECRET_REQUEST;
return packet;
}
create.sharedSecretSuccess = function createSharedSecretSuccess ( auth ) {
var packet = new Packet(auth);
packet.type = Packet.SSECRET_SUCCESS;
return packet;
}
create.sharedSecretFailure = function createSharedSecretFailure ( auth ) {
var packet = new Packet(auth);
packet.type = Packet.SSECRET_FAILURE;
return packet;
}
var check = exports.check = function check ( data ) {
return Packet.parse.check(data);
}
var connect = exports.connect = function connect ( server, callback, retransmission ) {
var server = server || { }
var socket = dgram.createSocket('udp4');
var done = function done ( error, value ) {
if ( error ) {
socket.close();
callback(error);
}
else {
socket.stun = value;
callback(null, socket);
}
}
socket.on('listening', function ( ) {
client.resolve(socket, server, done, retransmission);
});
socket.bind();
}
var resolve = exports.resolve = function resolve ( socket, server, callback, retransmission ) {
client.resolve(socket, server, callback, retransmission);
}
var respond = exports.respond = function respond ( socket, data, callback ) {
}
if ( require.main === module && process.argv[2] == 'test' ) {
var exec = require('child_process').exec;
var log = function log ( error, value ) {
console.log(error || value);
}
exec('node lib/Packet.js', log);
var socket, server = { host: 'stun.l.google.com', port: 19302 }
var callback = function callback ( error, value ) {
if ( !error ) {
socket = value;
console.log(socket.stun);
socket.close();
}
else console.log('Something went wrong: ' + error);
}
connect(server, callback);
}