code: def mirror(self):
          
  
          self.ipdst, self.ipsrc = self.ipsrc, self.ipdst
          self.dport, self.sport = self.sport, self.dport
  
          self.rcs, self.wcs = self.wcs, self.rcs
          if self.rcs:
              self.rcs.row = "read"
          if self.wcs:
              self.wcs.row = "write"
  
          self.prcs, self.pwcs = self.pwcs, self.prcs
          if self.prcs:
              self.prcs.row = "read"
          if self.pwcs:
              self.pwcs.row = "write"
  
          self.triggered_prcs_commit, self.triggered_pwcs_commit = \
              self.triggered_pwcs_commit, self.triggered_prcs_commit
  
          if self.connection_end == "client":
              self.connection_end = "server"
          elif self.connection_end == "server":
              self.connection_end = "client"
  
          return self
docs: This function takes a tlsSession object and swaps the IP addresses,
          ports, connection ends and connection states. The triggered_commit are
          also swapped (though it is probably overkill, it is cleaner this way).
  
          It is useful for static analysis of a series of messages from both the
          client and the server. In such a situation, it should be used every
          time the message being read comes from a different side than the one
          read right before, as the reading state becomes the writing state, and
          vice versa. For instance you could do:
  
          client_hello = open('client_hello.raw').read()
          <read other messages>
  
          m1 = TLS(client_hello)
          m2 = TLS(server_hello, tls_session=m1.tls_session.mirror())
          m3 = TLS(server_cert, tls_session=m2.tls_session)
          m4 = TLS(client_keyexchange, tls_session=m3.tls_session.mirror())