def process_tcp_frame(self,
                          id=None,
                          msg=None):
        """process_tcp_frame

        Convert a complex nested json dictionary
        to a flattened dictionary and capture
        all unique keys for table construction

        :param id: key for this msg
        :param msg: tcp frame for packet
        """

        # normalize into a dataframe
        df = json_normalize(msg)
        # convert to a flattened dictionary
        dt = json.loads(df.to_json())

        flat_msg = {}

        for k in dt:
            new_key = "tcp_{}".format(k)
            flat_msg[new_key] = dt[k]["0"]
            if new_key not in self.tcp_keys:
                self.tcp_keys[new_key] = k
        # end of capturing all unique keys

        dt["tcp_id"] = id
        self.all_tcp.append(dt)

        log.debug("TCP data updated:")
        log.debug(self.tcp_keys)
        log.debug(self.all_tcp)
        log.debug("")

        return flat_msg