add error file and TPDU layer is connected

This commit is contained in:
speyrefitte
2013-10-14 16:38:35 +02:00
parent bd5ff81a4c
commit ac6c320ec7
3 changed files with 58 additions and 6 deletions

View File

@@ -0,0 +1,20 @@
'''
@author: sylvain
'''
class InvalidExpectedDataException(Exception):
'''
raise when expected data on network is invalid
'''
def __init__(self, message):
'''
constructor with message
'''
self._message = message
def __str__(self):
'''
return string representation of exception
'''
return "%s"%self._message

View File

@@ -5,6 +5,7 @@ Created on 5 sept. 2013
'''
from rdpy.protocol.common.layer import Layer
from rdpy.protocol.common.stream import Stream
from rdpy.protocol.common.error import InvalidExpectedDataException
class TPDU(Layer):
'''
classdocs
@@ -23,8 +24,35 @@ class TPDU(Layer):
def connect(self):
self.writeMessage(TPDU.X224_TPDU_CONNECTION_REQUEST)
def recv(self, data):
'''
main receive function
layer complexity doesn't need automata
'''
#unused length
len = data.read_uint8()
code = data.read_uint8()
if code == TPDU.X224_TPDU_DATA:
data.read_uint8()
self._presentation.recv(data)
else:
#padding
data.read_leuint32()
if code == TPDU.X224_TPDU_CONNECTION_CONFIRM:
self._presentation.connect()
elif code == TPDU.X224_TPDU_CONNECTION_REQUEST:
self.writeMessage(TPDU.X224_TPDU_CONNECTION_CONFIRM)
self._presentation.connect()
else:
raise InvalidExpectedDataException("invalid TPDU header code %d"%code)
def write(self, data):
'''
write message packet for TPDU layer
add TPDU header
'''
s = Stream()
s.write_uint8(2)
s.write_uint8(TPDU.X224_TPDU_DATA)
@@ -33,10 +61,14 @@ class TPDU(Layer):
self._transport.write(data)
def writeMessage(self, code):
'''
special write function
that packet TPDU message
'''
s = Stream()
s.write_uint8(6);
s.write_uint8(code);
s.write_beuint16(0);
s.write_beuint16(0);
s.write_uint8(0);
s.write_uint8(6)
s.write_uint8(code)
s.write_beuint16(0)
s.write_beuint16(0)
s.write_uint8(0)
self.write(s)

View File

@@ -78,7 +78,7 @@ class TPKT(RawLayer):
read classic TPKT packet
'''
#next state is pass to
self.recv(data)
self._presentation.recv(data)
self.expect(2, self.readHeader)
def write(self, data):