Skip to content
This repository was archived by the owner on Oct 23, 2024. It is now read-only.

Commit 7c5ccf5

Browse files
authored
Use tickets for internal connection (#932)
* Add connect ticket for RawTransport
1 parent 525cabb commit 7c5ccf5

17 files changed

+204
-22
lines changed

source/agent/InternalConnectionFactory.js

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ try {
3939
}
4040

4141
// Wrapper object for sctp-connection and tcp/udp-connection
42-
function InConnection(prot, minport, maxport) {
42+
function InConnection(prot, minport, maxport, ticket) {
4343
var conn = null;
4444
var protocol = "quic";
4545

4646
switch (prot) {
4747
case 'tcp':
4848
case 'udp':
4949
protocol = prot;
50-
conn = new InternalIn(prot, minport, maxport);
50+
conn = new InternalIn(prot, minport, maxport, ticket);
5151
break;
5252
case 'quic':
5353
conn = new quicIO.in(cf, kf);
@@ -78,7 +78,7 @@ function InConnection(prot, minport, maxport) {
7878
}
7979

8080
// Wrapper object for sctp-connection and tcp/udp-connection
81-
function OutConnection(prot, minport, maxport) {
81+
function OutConnection(prot, minport, maxport, ticket) {
8282
var that = {};
8383
var conn = null;
8484
var protocol = "quic";
@@ -111,7 +111,7 @@ function OutConnection(prot, minport, maxport) {
111111
} else if (protocol === 'quic') {
112112
conn = new quicIO.out(connectOpt.ip, connectOpt.port);
113113
} else {
114-
conn = new InternalOut(protocol, connectOpt.ip, connectOpt.port);
114+
conn = new InternalOut(protocol, connectOpt.ip, connectOpt.port, ticket);
115115
}
116116
};
117117

@@ -139,6 +139,7 @@ module.exports = function() {
139139
var prot = internalOpt.protocol;
140140
var minport = internalOpt.minport || 0;
141141
var maxport = internalOpt.maxport || 0;
142+
var ticket = internalOpt.ticket;
142143

143144
if (preparedSet[connId]) {
144145
log.warn('Internal Connection already prepared:', connId);
@@ -147,7 +148,9 @@ module.exports = function() {
147148
// right call sequence in upper layer.
148149
return preparedSet[connId].connection.getListeningPort();
149150
}
150-
var conn = (direction === 'in')? InConnection(prot, minport, maxport) : OutConnection(prot, minport, maxport);
151+
var conn = (direction === 'in')
152+
? InConnection(prot, minport, maxport, ticket)
153+
: OutConnection(prot, minport, maxport, ticket);
151154

152155
preparedSet[connId] = {connection: conn, direction: direction};
153156
return conn.getListeningPort();

source/agent/addons/internalIO/InternalInWrapper.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,23 @@ void InternalIn::New(const FunctionCallbackInfo<Value>& args) {
3737
String::Utf8Value param0(args[0]->ToString());
3838
std::string protocol = std::string(*param0);
3939
unsigned int minPort = 0, maxPort = 0;
40+
std::string ticket;
4041

4142
if (args.Length() >= 3) {
4243
minPort = args[1]->Uint32Value();
4344
maxPort = args[2]->Uint32Value();
4445
}
46+
if (args.Length() > 3) {
47+
String::Utf8Value param3(args[3]->ToString());
48+
ticket = std::string(*param3);
49+
}
4550

4651
InternalIn* obj = new InternalIn();
47-
obj->me = new owt_base::InternalIn(protocol, minPort, maxPort);
52+
if (ticket.empty()) {
53+
obj->me = new owt_base::InternalIn(protocol, minPort, maxPort);
54+
} else {
55+
obj->me = new owt_base::InternalIn(protocol, ticket, minPort, maxPort);
56+
}
4857
obj->src = obj->me;
4958

5059
obj->Wrap(args.This());

source/agent/addons/internalIO/InternalOutWrapper.cc

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,18 @@ void InternalOut::New(const v8::FunctionCallbackInfo<v8::Value>& args) {
3636
String::Utf8Value param1(args[1]->ToString());
3737
std::string dest_ip = std::string(*param1);
3838
unsigned int dest_port = args[2]->Uint32Value();
39+
std::string ticket;
40+
if (args.Length() > 3) {
41+
String::Utf8Value param3(args[3]->ToString());
42+
ticket = std::string(*param3);
43+
}
3944

4045
InternalOut* obj = new InternalOut();
41-
obj->me = new owt_base::InternalOut(protocol, dest_ip, dest_port);
46+
if (ticket.empty()) {
47+
obj->me = new owt_base::InternalOut(protocol, dest_ip, dest_port);
48+
} else {
49+
obj->me = new owt_base::InternalOut(protocol, ticket, dest_ip, dest_port);
50+
}
4251
obj->dest = obj->me;
4352

4453
obj->Wrap(args.This());

source/agent/analytics/analytics-agent.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,16 @@ class AnalyticsAgent extends BaseAgent {
2525
this.engine = new VideoAnalyzer();
2626

2727
this.flag = 0;
28+
this.ticket = null;
2829
}
2930

3031
// override
3132
createInternalConnection(connectionId, direction, internalOpt) {
3233
internalOpt.minport = global.config.internal.minport;
3334
internalOpt.maxport = global.config.internal.maxport;
35+
this.ticket = internalOpt.ticket;
3436
if (direction == 'in') {
35-
this.engine.emitListenTo(internalOpt.minport,internalOpt.maxport);
37+
this.engine.emitListenTo(internalOpt.minport,internalOpt.maxport, this.ticket);
3638
const portInfo = this.engine.getListeningPort();
3739
// Create internal connection always success
3840
return Promise.resolve({ip: global.config.internal.ip_address, port: portInfo});

source/agent/analytics/videoGstPipeline/GstInternalIn.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ static void dump(void* index, uint8_t* buf, int len)
1919
}
2020

2121
DEFINE_LOGGER(GstInternalIn, "GstInternalIn");
22-
GstInternalIn::GstInternalIn(GstAppSrc *data, unsigned int minPort, unsigned int maxPort)
22+
GstInternalIn::GstInternalIn(GstAppSrc *data, unsigned int minPort, unsigned int maxPort, std::string ticket)
2323
{
2424
m_transport.reset(new owt_base::RawTransport<owt_base::TCP>(this));
2525

26+
m_transport->initTicket(ticket);
2627
if (minPort > 0 && minPort <= maxPort) {
2728
m_transport->listenTo(minPort, maxPort);
2829
} else {

source/agent/analytics/videoGstPipeline/GstInternalIn.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
class GstInternalIn : public owt_base::RawTransportListener{
1717
DECLARE_LOGGER();
1818
public:
19-
GstInternalIn(GstAppSrc *data, unsigned int minPort = 0, unsigned int maxPort = 0);
19+
GstInternalIn(GstAppSrc *data, unsigned int minPort = 0, unsigned int maxPort = 0, std::string ticket = NULL);
2020
virtual ~GstInternalIn();
2121

2222
unsigned int getListeningPort();

source/agent/analytics/videoGstPipeline/VideoGstAnalyzer.cc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -352,10 +352,9 @@ int VideoGstAnalyzer::setPlaying()
352352
return 0;
353353
}
354354

355-
void VideoGstAnalyzer::emitListenTo(int minPort, int maxPort)
356-
{
355+
void VideoGstAnalyzer::emitListenTo(int minPort, int maxPort, std::string ticket) {
357356
ELOG_DEBUG("Listening\n");
358-
m_internalin.reset(new GstInternalIn((GstAppSrc*)source, minPort, maxPort));
357+
m_internalin.reset(new GstInternalIn((GstAppSrc*)source, minPort, maxPort, ticket));
359358
}
360359

361360
void VideoGstAnalyzer::addOutput(int connectionID, owt_base::FrameDestination* out)

source/agent/analytics/videoGstPipeline/VideoGstAnalyzer.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ class VideoGstAnalyzer : public EventRegistry {
3030
void clearPipeline();
3131
void destroyPipeline();
3232
int getListeningPort();
33-
void emitListenTo(int minPort,int maxPort);
33+
void emitListenTo(int minPort, int maxPort, std::string ticket);
3434
int setPlaying();
3535

3636
int addElementMany();

source/agent/analytics/videoGstPipeline/VideoGstAnalyzerWrap.cc

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,11 +97,17 @@ void VideoGstAnalyzerWrap::emitListenTo(const FunctionCallbackInfo<Value>& args)
9797
mcu::VideoGstAnalyzer* me = obj->me;
9898

9999
unsigned int minPort = 0, maxPort = 0;
100+
std::string ticket;
100101

102+
if (args.Length() >= 3) {
101103
minPort = args[0]->Uint32Value();
102104
maxPort = args[1]->Uint32Value();
103105

104-
me->emitListenTo(minPort,maxPort);
106+
String::Utf8Value param3(args[2]->ToString());
107+
ticket = std::string(*param3);
108+
}
109+
me->emitListenTo(minPort, maxPort, ticket);
110+
105111
}
106112

107113

source/agent/conference/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
"node-getopt": "*",
88
"toml": "*",
99
"mongoose": "^5.9.6",
10+
"uuid": "^8.0.0",
1011
"fraction.js": "^4.0.12"
1112
},
1213
"devDependencies": {

0 commit comments

Comments
 (0)