Skip to content

Commit d54836b

Browse files
committed
Updated to live555 2021.11.01
1 parent 7be67f6 commit d54836b

19 files changed

Lines changed: 217 additions & 145 deletions

BasicUsageEnvironment/include/BasicUsageEnvironment_version.hh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
1919
#ifndef _BASICUSAGEENVIRONMENT_VERSION_HH
2020
#define _BASICUSAGEENVIRONMENT_VERSION_HH
2121

22-
#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_STRING "2021.08.24"
23-
#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_INT 1629763200
22+
#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_STRING "2021.11.01"
23+
#define BASICUSAGEENVIRONMENT_LIBRARY_VERSION_INT 1635724800
2424

2525
#endif

UsageEnvironment/include/UsageEnvironment_version.hh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
1919
#ifndef _USAGEENVIRONMENT_VERSION_HH
2020
#define _USAGEENVIRONMENT_VERSION_HH
2121

22-
#define USAGEENVIRONMENT_LIBRARY_VERSION_STRING "2021.08.24"
23-
#define USAGEENVIRONMENT_LIBRARY_VERSION_INT 1629763200
22+
#define USAGEENVIRONMENT_LIBRARY_VERSION_STRING "2021.11.01"
23+
#define USAGEENVIRONMENT_LIBRARY_VERSION_INT 1635724800
2424

2525
#endif

config.linux-with-shared-libraries

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
# At least one interface changes, or is removed => CURRENT += 1; REVISION = 0; AGE = 0
44
# One or more interfaces were added, but no existing interfaces were changed or removed => CURRENT += 1; REVISION = 0; AGE += 1
55

6-
libliveMedia_VERSION_CURRENT=97
7-
libliveMedia_VERSION_REVISION=3
6+
libliveMedia_VERSION_CURRENT=99
7+
libliveMedia_VERSION_REVISION=0
88
libliveMedia_VERSION_AGE=0
99
libliveMedia_LIB_SUFFIX=so.$(shell expr $(libliveMedia_VERSION_CURRENT) - $(libliveMedia_VERSION_AGE)).$(libliveMedia_VERSION_AGE).$(libliveMedia_VERSION_REVISION)
1010

groupsock/include/groupsock_version.hh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
1919
#ifndef _GROUPSOCK_VERSION_HH
2020
#define _GROUPSOCK_VERSION_HH
2121

22-
#define GROUPSOCK_LIBRARY_VERSION_STRING "2021.08.24"
23-
#define GROUPSOCK_LIBRARY_VERSION_INT 1629763200
22+
#define GROUPSOCK_LIBRARY_VERSION_STRING "2021.11.01"
23+
#define GROUPSOCK_LIBRARY_VERSION_INT 1635724800
2424

2525
#endif

liveMedia/Makefile.tail

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ FramedFilter.$(CPP): include/FramedFilter.hh
8282
include/FramedFilter.hh: include/FramedSource.hh
8383
RTPSource.$(CPP): include/RTPSource.hh
8484
include/RTPSource.hh: include/FramedSource.hh include/RTPInterface.hh include/SRTPCryptographicContext.hh
85-
include/RTPInterface.hh: include/Media.hh
85+
include/RTPInterface.hh: include/Media.hh include/TLSState.hh
8686
MultiFramedRTPSource.$(CPP): include/MultiFramedRTPSource.hh include/RTCP.hh
8787
include/MultiFramedRTPSource.hh: include/RTPSource.hh
8888
SimpleRTPSource.$(CPP): include/SimpleRTPSource.hh

liveMedia/MatroskaFileParser.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,7 @@ void MatroskaFileParser::deliverFrameBytes() {
12311231

12321232
MatroskaDemuxedTrack* demuxedTrack = fOurDemux->lookupDemuxedTrack(fBlockTrackNumber);
12331233
if (demuxedTrack == NULL) break; // shouldn't happen
1234+
if (!demuxedTrack->isCurrentlyAwaitingData()) return; // wait until we're asked for data
12341235

12351236
unsigned const BANK_SIZE = bankSize();
12361237
while (fCurFrameNumBytesToGet > 0) {

liveMedia/RTCP.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -379,27 +379,27 @@ void RTCPInstance::sendAppPacket(u_int8_t subtype, char const* name,
379379
sendBuiltPacket();
380380
}
381381

382-
void RTCPInstance::setStreamSocket(int sockNum,
383-
unsigned char streamChannelId) {
382+
void RTCPInstance::setStreamSocket(int sockNum, unsigned char streamChannelId,
383+
TLSState* tlsState) {
384384
// Turn off background read handling:
385385
fRTCPInterface.stopNetworkReading();
386386

387387
// Switch to RTCP-over-TCP:
388-
fRTCPInterface.setStreamSocket(sockNum, streamChannelId);
388+
fRTCPInterface.setStreamSocket(sockNum, streamChannelId, tlsState);
389389

390390
// Turn background reading back on:
391391
TaskScheduler::BackgroundHandlerProc* handler
392392
= (TaskScheduler::BackgroundHandlerProc*)&incomingReportHandler;
393393
fRTCPInterface.startNetworkReading(handler);
394394
}
395395

396-
void RTCPInstance::addStreamSocket(int sockNum,
397-
unsigned char streamChannelId) {
396+
void RTCPInstance::addStreamSocket(int sockNum, unsigned char streamChannelId,
397+
TLSState* tlsState) {
398398
// First, turn off background read handling for the default (UDP) socket:
399399
envir().taskScheduler().turnOffBackgroundReadHandling(fRTCPInterface.gs()->socketNum());
400400

401401
// Add the RTCP-over-TCP interface:
402-
fRTCPInterface.addStreamSocket(sockNum, streamChannelId);
402+
fRTCPInterface.addStreamSocket(sockNum, streamChannelId, tlsState);
403403

404404
// Turn on background reading for this socket (in case it's not on already):
405405
TaskScheduler::BackgroundHandlerProc* handler

liveMedia/RTPInterface.cpp

Lines changed: 50 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -32,13 +32,15 @@ along with this library; if not, write to the Free Software Foundation, Inc.,
3232
class tcpStreamRecord {
3333
public:
3434
tcpStreamRecord(int streamSocketNum, unsigned char streamChannelId,
35+
TLSState* tlsState,
3536
tcpStreamRecord* next);
3637
virtual ~tcpStreamRecord();
3738

3839
public:
3940
tcpStreamRecord* fNext;
4041
int fStreamSocketNum;
4142
unsigned char fStreamChannelId;
43+
TLSState* fTLSState;
4244
};
4345

4446
// Reading RTP-over-TCP is implemented using two levels of hash tables.
@@ -59,7 +61,7 @@ static HashTable* socketHashTable(UsageEnvironment& env, Boolean createIfNotPres
5961

6062
class SocketDescriptor {
6163
public:
62-
SocketDescriptor(UsageEnvironment& env, int socketNum);
64+
SocketDescriptor(UsageEnvironment& env, int socketNum, TLSState* tlsState);
6365
virtual ~SocketDescriptor();
6466

6567
void registerRTPInterface(unsigned char streamChannelId,
@@ -79,6 +81,7 @@ class SocketDescriptor {
7981
private:
8082
UsageEnvironment& fEnv;
8183
int fOurSocketNum;
84+
TLSState* fTLSState;
8285
HashTable* fSubChannelHashTable;
8386
ServerRequestAlternativeByteHandler* fServerRequestAlternativeByteHandler;
8487
void* fServerRequestAlternativeByteHandlerClientData;
@@ -87,15 +90,17 @@ class SocketDescriptor {
8790
enum { AWAITING_DOLLAR, AWAITING_STREAM_CHANNEL_ID, AWAITING_SIZE1, AWAITING_SIZE2, AWAITING_PACKET_DATA } fTCPReadingState;
8891
};
8992

90-
static SocketDescriptor* lookupSocketDescriptor(UsageEnvironment& env, int sockNum, Boolean createIfNotFound = True) {
93+
static SocketDescriptor*
94+
lookupSocketDescriptor(UsageEnvironment& env, int sockNum, TLSState* tlsState = NULL,
95+
Boolean createIfNotFound = True) {
9196
HashTable* table = socketHashTable(env, createIfNotFound);
9297
if (table == NULL) return NULL;
9398

9499
char const* key = (char const*)(long)sockNum;
95100
SocketDescriptor* socketDescriptor = (SocketDescriptor*)(table->Lookup(key));
96101
if (socketDescriptor == NULL) {
97102
if (createIfNotFound) {
98-
socketDescriptor = new SocketDescriptor(env, sockNum);
103+
socketDescriptor = new SocketDescriptor(env, sockNum, tlsState);
99104
table->Add((char const*)(long)(sockNum), socketDescriptor);
100105
} else if (table->IsEmpty()) {
101106
// We can also delete the table (to reclaim space):
@@ -130,7 +135,7 @@ RTPInterface::RTPInterface(Medium* owner, Groupsock* gs)
130135
: fOwner(owner), fGS(gs),
131136
fTCPStreams(NULL),
132137
fNextTCPReadSize(0), fNextTCPReadStreamSocketNum(-1),
133-
fNextTCPReadStreamChannelId(0xFF), fReadHandlerProc(NULL),
138+
fNextTCPReadStreamChannelId(0xFF), fNextTCPReadTLSState(NULL), fReadHandlerProc(NULL),
134139
fAuxReadHandlerFunc(NULL), fAuxReadHandlerClientData(NULL) {
135140
// Make the socket non-blocking, even though it will be read from only asynchronously, when packets arrive.
136141
// The reason for this is that, in some OSs, reads on a blocking socket can (allegedly) sometimes block,
@@ -145,17 +150,17 @@ RTPInterface::~RTPInterface() {
145150
delete fTCPStreams;
146151
}
147152

148-
void RTPInterface::setStreamSocket(int sockNum,
149-
unsigned char streamChannelId) {
153+
void RTPInterface::setStreamSocket(int sockNum, unsigned char streamChannelId,
154+
TLSState* tlsState) {
150155
fGS->removeAllDestinations();
151156
envir().taskScheduler().disableBackgroundHandling(fGS->socketNum()); // turn off any reading on our datagram socket
152157
fGS->reset(); // and close our datagram socket, because we won't be using it anymore
153158

154-
addStreamSocket(sockNum, streamChannelId);
159+
addStreamSocket(sockNum, streamChannelId, tlsState);
155160
}
156161

157-
void RTPInterface::addStreamSocket(int sockNum,
158-
unsigned char streamChannelId) {
162+
void RTPInterface::addStreamSocket(int sockNum, unsigned char streamChannelId,
163+
TLSState* tlsState) {
159164
if (sockNum < 0) return;
160165

161166
for (tcpStreamRecord* streams = fTCPStreams; streams != NULL;
@@ -166,15 +171,15 @@ void RTPInterface::addStreamSocket(int sockNum,
166171
}
167172
}
168173

169-
fTCPStreams = new tcpStreamRecord(sockNum, streamChannelId, fTCPStreams);
174+
fTCPStreams = new tcpStreamRecord(sockNum, streamChannelId, tlsState, fTCPStreams);
170175

171176
// Also, make sure this new socket is set up for receiving RTP/RTCP-over-TCP:
172-
SocketDescriptor* socketDescriptor = lookupSocketDescriptor(envir(), sockNum);
177+
SocketDescriptor* socketDescriptor = lookupSocketDescriptor(envir(), sockNum, tlsState);
173178
socketDescriptor->registerRTPInterface(streamChannelId, this);
174179
}
175180

176181
static void deregisterSocket(UsageEnvironment& env, int sockNum, unsigned char streamChannelId) {
177-
SocketDescriptor* socketDescriptor = lookupSocketDescriptor(env, sockNum, False);
182+
SocketDescriptor* socketDescriptor = lookupSocketDescriptor(env, sockNum, NULL, False);
178183
if (socketDescriptor != NULL) {
179184
socketDescriptor->deregisterRTPInterface(streamChannelId);
180185
// Note: This may delete "socketDescriptor",
@@ -216,7 +221,7 @@ void RTPInterface::removeStreamSocket(int sockNum,
216221

217222
void RTPInterface::setServerRequestAlternativeByteHandler(UsageEnvironment& env, int socketNum,
218223
ServerRequestAlternativeByteHandler* handler, void* clientData) {
219-
SocketDescriptor* socketDescriptor = lookupSocketDescriptor(env, socketNum, False);
224+
SocketDescriptor* socketDescriptor = lookupSocketDescriptor(env, socketNum, NULL, False);
220225

221226
if (socketDescriptor != NULL) socketDescriptor->setServerRequestAlternativeByteHandler(handler, clientData);
222227
}
@@ -236,7 +241,8 @@ Boolean RTPInterface::sendPacket(unsigned char* packet, unsigned packetSize) {
236241
for (tcpStreamRecord* stream = fTCPStreams; stream != NULL; stream = nextStream) {
237242
nextStream = stream->fNext; // Set this now, in case the following deletes "stream":
238243
if (!sendRTPorRTCPPacketOverTCP(packet, packetSize,
239-
stream->fStreamSocketNum, stream->fStreamChannelId)) {
244+
stream->fStreamSocketNum, stream->fStreamChannelId,
245+
stream->fTLSState)) {
240246
success = False;
241247
}
242248
}
@@ -288,9 +294,11 @@ Boolean RTPInterface::handleRead(unsigned char* buffer, unsigned bufferMaxSize,
288294
((sockaddr_in&)fromAddress).sin_addr.s_addr = 0;
289295
((sockaddr_in&)fromAddress).sin_port = 0;
290296

291-
while ((curBytesRead = readSocket(envir(), fNextTCPReadStreamSocketNum,
292-
&buffer[bytesRead], curBytesToRead,
293-
fromAddress)) > 0) {
297+
while ((curBytesRead = (fNextTCPReadTLSState != NULL && fNextTCPReadTLSState->isNeeded)
298+
? fNextTCPReadTLSState->read(&buffer[bytesRead], curBytesToRead)
299+
: readSocket(envir(), fNextTCPReadStreamSocketNum,
300+
&buffer[bytesRead], curBytesToRead,
301+
fromAddress)) > 0) {
294302
bytesRead += curBytesRead;
295303
if (bytesRead >= totBytesToRead) break;
296304
curBytesToRead -= curBytesRead;
@@ -332,7 +340,8 @@ void RTPInterface::stopNetworkReading() {
332340
////////// Helper Functions - Implementation /////////
333341

334342
Boolean RTPInterface::sendRTPorRTCPPacketOverTCP(u_int8_t* packet, unsigned packetSize,
335-
int socketNum, unsigned char streamChannelId) {
343+
int socketNum, unsigned char streamChannelId,
344+
TLSState* tlsState) {
336345
#ifdef DEBUG_SEND
337346
fprintf(stderr, "sendRTPorRTCPPacketOverTCP: %d bytes over channel %d (socket %d)\n",
338347
packetSize, streamChannelId, socketNum); fflush(stderr);
@@ -348,9 +357,9 @@ Boolean RTPInterface::sendRTPorRTCPPacketOverTCP(u_int8_t* packet, unsigned pack
348357
framingHeader[1] = streamChannelId;
349358
framingHeader[2] = (u_int8_t) ((packetSize&0xFF00)>>8);
350359
framingHeader[3] = (u_int8_t) (packetSize&0xFF);
351-
if (!sendDataOverTCP(socketNum, framingHeader, 4, False)) break;
360+
if (!sendDataOverTCP(socketNum, tlsState, framingHeader, 4, False)) break;
352361

353-
if (!sendDataOverTCP(socketNum, packet, packetSize, True)) break;
362+
if (!sendDataOverTCP(socketNum, tlsState, packet, packetSize, True)) break;
354363
#ifdef DEBUG_SEND
355364
fprintf(stderr, "sendRTPorRTCPPacketOverTCP: completed\n"); fflush(stderr);
356365
#endif
@@ -368,8 +377,12 @@ Boolean RTPInterface::sendRTPorRTCPPacketOverTCP(u_int8_t* packet, unsigned pack
368377
#define RTPINTERFACE_BLOCKING_WRITE_TIMEOUT_MS 500
369378
#endif
370379

371-
Boolean RTPInterface::sendDataOverTCP(int socketNum, u_int8_t const* data, unsigned dataSize, Boolean forceSendToSucceed) {
372-
int sendResult = send(socketNum, (char const*)data, dataSize, 0/*flags*/);
380+
Boolean RTPInterface::sendDataOverTCP(int socketNum, TLSState* tlsState,
381+
u_int8_t const* data, unsigned dataSize,
382+
Boolean forceSendToSucceed) {
383+
int sendResult = (tlsState != NULL && tlsState->isNeeded)
384+
? tlsState->write((char const*)data, dataSize)
385+
: send(socketNum, (char const*)data, dataSize, 0/*flags*/);
373386
if (sendResult < (int)dataSize) {
374387
// The TCP send() failed - at least partially.
375388

@@ -383,7 +396,9 @@ Boolean RTPInterface::sendDataOverTCP(int socketNum, u_int8_t const* data, unsig
383396
fprintf(stderr, "sendDataOverTCP: resending %d-byte send (blocking)\n", numBytesRemainingToSend); fflush(stderr);
384397
#endif
385398
makeSocketBlocking(socketNum, RTPINTERFACE_BLOCKING_WRITE_TIMEOUT_MS);
386-
sendResult = send(socketNum, (char const*)(&data[numBytesSentSoFar]), numBytesRemainingToSend, 0/*flags*/);
399+
sendResult = (tlsState != NULL && tlsState->isNeeded)
400+
? tlsState->write((char const*)(&data[numBytesSentSoFar]), numBytesRemainingToSend)
401+
: send(socketNum, (char const*)(&data[numBytesSentSoFar]), numBytesRemainingToSend, 0/*flags*/);
387402
if ((unsigned)sendResult != numBytesRemainingToSend) {
388403
// The blocking "send()" failed, or timed out. In either case, we assume that the
389404
// TCP connection has failed (or is 'hanging' indefinitely), and we stop using it
@@ -411,8 +426,8 @@ Boolean RTPInterface::sendDataOverTCP(int socketNum, u_int8_t const* data, unsig
411426
return True;
412427
}
413428

414-
SocketDescriptor::SocketDescriptor(UsageEnvironment& env, int socketNum)
415-
:fEnv(env), fOurSocketNum(socketNum),
429+
SocketDescriptor::SocketDescriptor(UsageEnvironment& env, int socketNum, TLSState* tlsState)
430+
: fEnv(env), fOurSocketNum(socketNum), fTLSState(tlsState),
416431
fSubChannelHashTable(HashTable::create(ONE_WORD_HASH_KEYS)),
417432
fServerRequestAlternativeByteHandler(NULL), fServerRequestAlternativeByteHandlerClientData(NULL),
418433
fReadErrorOccurred(False), fDeleteMyselfNext(False), fAreInReadHandlerLoop(False), fTCPReadingState(AWAITING_DOLLAR) {
@@ -513,7 +528,9 @@ Boolean SocketDescriptor::tcpReadHandler1(int mask) {
513528
u_int8_t c;
514529
struct sockaddr_storage dummy; // not used
515530
if (fTCPReadingState != AWAITING_PACKET_DATA) {
516-
int result = readSocket(fEnv, fOurSocketNum, &c, 1, dummy);
531+
int result = (fTLSState != NULL && fTLSState->isNeeded)
532+
? fTLSState->read(&c, 1)
533+
: readSocket(fEnv, fOurSocketNum, &c, 1, dummy);
517534
if (result == 0) { // There was no more data to read
518535
return False;
519536
} else if (result != 1) { // error reading TCP socket, so we will no longer handle it
@@ -573,6 +590,7 @@ Boolean SocketDescriptor::tcpReadHandler1(int mask) {
573590
rtpInterface->fNextTCPReadSize = size;
574591
rtpInterface->fNextTCPReadStreamSocketNum = fOurSocketNum;
575592
rtpInterface->fNextTCPReadStreamChannelId = fStreamChannelId;
593+
rtpInterface->fNextTCPReadTLSState = fTLSState;
576594
}
577595
fTCPReadingState = AWAITING_PACKET_DATA;
578596
break;
@@ -597,7 +615,9 @@ Boolean SocketDescriptor::tcpReadHandler1(int mask) {
597615
#ifdef DEBUG_RECEIVE
598616
fprintf(stderr, "SocketDescriptor(socket %d)::tcpReadHandler(): No handler proc for \"rtpInterface\" for channel %d; need to skip %d remaining bytes\n", fOurSocketNum, fStreamChannelId, rtpInterface->fNextTCPReadSize);
599617
#endif
600-
int result = readSocket(fEnv, fOurSocketNum, &c, 1, dummy);
618+
int result = (fTLSState != NULL && fTLSState->isNeeded)
619+
? fTLSState->read(&c, 1)
620+
: readSocket(fEnv, fOurSocketNum, &c, 1, dummy);
601621
if (result < 0) { // error reading TCP socket, so we will no longer handle it
602622
#ifdef DEBUG_RECEIVE
603623
fprintf(stderr, "SocketDescriptor(socket %d)::tcpReadHandler(): readSocket(1 byte) returned %d (error)\n", fOurSocketNum, result);
@@ -628,9 +648,11 @@ Boolean SocketDescriptor::tcpReadHandler1(int mask) {
628648

629649
tcpStreamRecord
630650
::tcpStreamRecord(int streamSocketNum, unsigned char streamChannelId,
651+
TLSState* tlsState,
631652
tcpStreamRecord* next)
632653
: fNext(next),
633-
fStreamSocketNum(streamSocketNum), fStreamChannelId(streamChannelId) {
654+
fStreamSocketNum(streamSocketNum), fStreamChannelId(streamChannelId),
655+
fTLSState(tlsState) {
634656
}
635657

636658
tcpStreamRecord::~tcpStreamRecord() {

liveMedia/RTSPClient.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,6 @@ unsigned RTSPClient::sendSetupCommand(MediaSubsession& subsession, responseHandl
5353
Boolean streamOutgoing, Boolean streamUsingTCP, Boolean forceMulticastOnUnspecified,
5454
Authenticator* authenticator) {
5555
if (fTunnelOverHTTPPortNum != 0) streamUsingTCP = True; // RTSP-over-HTTP tunneling uses TCP (by definition)
56-
// However, if we're using a TLS connection, streaming over TCP doesn't work, so disable it:
57-
if (fTLS.isNeeded) streamUsingTCP = False;
5856
if (fCurrentAuthenticator < authenticator) fCurrentAuthenticator = *authenticator;
5957

6058
u_int32_t booleanFlags = 0;
@@ -1253,13 +1251,13 @@ Boolean RTSPClient::handleSETUPResponse(MediaSubsession& subsession, char const*
12531251
if (streamUsingTCP) {
12541252
// Tell the subsession to receive RTP (and send/receive RTCP) over the RTSP stream:
12551253
if (subsession.rtpSource() != NULL) {
1256-
subsession.rtpSource()->setStreamSocket(fInputSocketNum, subsession.rtpChannelId);
1254+
subsession.rtpSource()->setStreamSocket(fInputSocketNum, subsession.rtpChannelId, &fTLS);
12571255
// So that we continue to receive & handle RTSP commands and responses from the server
12581256
subsession.rtpSource()->enableRTCPReports() = False;
12591257
// To avoid confusing the server (which won't start handling RTP/RTCP-over-TCP until "PLAY"), don't send RTCP "RR"s yet
12601258
increaseReceiveBufferTo(envir(), fInputSocketNum, 50*1024);
12611259
}
1262-
if (subsession.rtcpInstance() != NULL) subsession.rtcpInstance()->setStreamSocket(fInputSocketNum, subsession.rtcpChannelId);
1260+
if (subsession.rtcpInstance() != NULL) subsession.rtcpInstance()->setStreamSocket(fInputSocketNum, subsession.rtcpChannelId, &fTLS);
12631261
RTPInterface::setServerRequestAlternativeByteHandler(envir(), fInputSocketNum, handleAlternativeRequestByte, this);
12641262
} else {
12651263
// Normal case.

0 commit comments

Comments
 (0)