Skip to content

Commit 382ee43

Browse files
author
odie5533
committed
Parameterized headers in endHeaders. Fixed content-length and length being set too early. Removed most debug print statements and added debugging for RTSP headers received.
1 parent ba745e3 commit 382ee43

File tree

1 file changed

+28
-25
lines changed

1 file changed

+28
-25
lines changed

rtsp.py

Lines changed: 28 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,8 @@ class RTSPClient(basic.LineReceiver):
107107

108108
session = None # RTSP Session
109109

110-
sent_options = False
111110
sent_setup = False
112111
sent_play = False
113-
sent_describe = False
114-
sent_parameter = False
115-
sent_bandwidth = False
116112

117113
def sendCommand(self, command, path):
118114
""" Sends off an RTSP command
@@ -210,16 +206,13 @@ def lineReceived(self, line):
210206
key, val = line.split(':', 1)
211207
val = val.lstrip()
212208
self.handleHeader(key, val)
213-
if key.lower() == 'content-length':
214-
self.content_length = int(val)
215-
self.length = self.content_length
216209
else:
217210
# End of the headers has been reached
218211
if self.content_length is not None:
219-
self._handleEndHeaders()
212+
self._handleEndHeaders(self.headers)
220213
self.setRawMode()
221214
else:
222-
self._handleEndHeaders()
215+
self._handleEndHeaders(self.headers)
223216
self.firstLine = 1
224217

225218
def connectionMade(self):
@@ -238,7 +231,7 @@ def connectionMade(self):
238231

239232
def handleStatus(self, version, status, message):
240233
""" Called when the status header is received """
241-
print(status)
234+
print('Status: %s' % status)
242235

243236
def handleHeader(self, key, value):
244237
""" Called when a single header is received
@@ -278,17 +271,27 @@ def sendNextMessage(self):
278271
return True
279272
return False
280273

281-
def _handleEndHeaders(self):
274+
def _handleEndHeaders(self, headers):
282275
""" Internal handleEndHeaders
283-
Checks the server's CSeq """
284-
if self.headers.get('cseq'):
285-
serverCSeq = int(self.headers['cseq'][0])
276+
Checks the server's CSeq and for content-length """
277+
try: self.header_file
278+
except AttributeError:
279+
self.header_file = open('headers.txt', 'wb')
280+
headerstr = '\r\n'.join('%s: %s' % (k,v[0]) for k,v in headers.items())
281+
self.header_file.write(headerstr)
282+
self.header_file.write('\r\n')
283+
284+
if headers.get('cseq'):
285+
serverCSeq = int(headers['cseq'][0])
286286
if serverCSeq != self.cseq - 1:
287287
print('Server CSeq != Client CSeq: %s != %s' %
288288
(serverCSeq, self.cseq - 1))
289-
self.handleEndHeaders()
289+
if headers.get('content-length'):
290+
self.content_length = int(headers['content-length'][0])
291+
self.length = self.content_length
292+
self.handleEndHeaders(headers)
290293

291-
def handleEndHeaders(self):
294+
def handleEndHeaders(self, headers):
292295
""" Called when all headers have been received """
293296
if self.content_length is not None:
294297
# We call sendNextMessage after the response has been received
@@ -303,7 +306,6 @@ def handleResponseEnd(self, data):
303306
if self.content_length:
304307
self.content_length = None
305308
self.handleContentResponse(data, self.content_type)
306-
print('resp end')
307309
self.sendNextMessage()
308310
self.content_type = None
309311
elif self.rtsp_length:
@@ -321,7 +323,7 @@ def handleResponsePart(self, data):
321323

322324
def rawDataReceived(self, data):
323325
""" Called when data is received in raw data mode
324-
Gathers self.content-length worth of data
326+
Gathers self.content-length worth of data in attach_buffer
325327
Returns what it doesn't use """
326328
if self.length is not None:
327329
self.attach_buffer.write(data)
@@ -367,6 +369,11 @@ class RDTClient(RTSPClient):
367369
prev_stream_num = None
368370
streamids = []
369371

372+
sent_options = False
373+
sent_describe = False
374+
sent_parameter = False
375+
sent_bandwidth = False
376+
370377
EOF = 0xff06
371378
LATENCY_REPORT = 0xff08
372379

@@ -390,10 +397,9 @@ class RDTClient(RTSPClient):
390397
# .1.. .... = Slow data & 0x40: 1
391398
# ..00 0011 = Asm Rule & 0x3F: 3
392399

393-
def handleEndHeaders(self):
394-
if self.headers.get('realchallenge1'):
395-
self.realchallenge1 = self.headers['realchallenge1'][0]
396-
print('heh %s' % self.content_length)
400+
def handleEndHeaders(self, headers):
401+
if headers.get('realchallenge1'):
402+
self.realchallenge1 = headers['realchallenge1'][0]
397403
if self.content_length is None:
398404
self.sendNextMessage()
399405

@@ -535,7 +541,6 @@ def sendNextMessage(self):
535541
""" This method goes in order sending messages to the server:
536542
OPTIONS, DESCRIBE, SETUP, SET_PARAMETER, SET_PARAMETER, PLAY
537543
Returns True if it sent a packet, False if it didn't """
538-
print('nxt msg')
539544
if not self.sent_options:
540545
self.sent_options = True
541546
self._sendOptions()
@@ -546,13 +551,11 @@ def sendNextMessage(self):
546551
return True
547552
if not self.sent_setup:
548553
self.sent_setup = True
549-
print('setup')
550554
challenge_tuple = RealChallenge.compute(self.realchallenge1)
551555
headers = {'RealChallenge2': '%s, sd=%s' % challenge_tuple}
552556
self._sendSetup(headers)
553557
return True
554558
if self.streamids:
555-
print('setup')
556559
self._sendSetup(streamid=self.streamids.pop(0))
557560
return True
558561
if not self.sent_parameter:

0 commit comments

Comments
 (0)