'Write some data to the channel.  If there is not enough remote window
available, buffer until it is.  Otherwise, split the data into
packets of length remoteMaxPacket and send them.
@type data: L{bytes}'

def write(self, data):

    if self.buf:
        self.buf += data
        return
    top = len(data)
    if (top > self.remoteWindowLeft):
        (data, self.buf) = (data[:self.remoteWindowLeft], data[self.remoteWindowLeft:])
        self.areWriting = 0
        self.stopWriting()
        top = self.remoteWindowLeft
    rmp = self.remoteMaxPacket
    write = self.conn.sendData
    r = range(0, top, rmp)
    for offset in r:
        write(self, data[offset:(offset + rmp)])
    self.remoteWindowLeft -= top
    if (self.closing and (not self.buf)):
        self.loseConnection()
