def reassembly(self, info):
BUFID = info.bufid  <EOL>FO = info.fo        <EOL>IHL = info.ihl      <EOL>MF = info.mf        <EOL>TL = info.tl        <EOL>if not FO and not MF:<EOL><INDENT>if BUFID in self._buffer:<EOL><INDENT>self._dtgram += self.submit(self._buffer[BUFID])<EOL>del self._buffer[BUFID]<EOL>return<EOL><DEDENT><DEDENT>if BUFID not in self._buffer:<EOL><INDENT>self._buffer[BUFID] = dict(<EOL>TDL=<NUM_LIT:0>,                          <EOL>RCVBT=bytearray(<NUM_LIT>),          <EOL>index=list(),                   <EOL>header=bytearray(),             <EOL>datagram=bytearray(<NUM_LIT>),      <EOL>)<EOL><DEDENT>self._buffer[BUFID]['<STR_LIT:index>'].append(info.num)<EOL>start = FO<EOL>stop = TL - IHL + FO<EOL>self._buffer[BUFID]['<STR_LIT>'][start:stop] = info.payload<EOL>start = FO // <NUM_LIT:8><EOL>stop = FO // <NUM_LIT:8> + (TL - IHL + <NUM_LIT:7>) // <NUM_LIT:8><EOL>self._buffer[BUFID]['<STR_LIT>'][start:stop] = b'<STR_LIT>' * (stop - start + <NUM_LIT:1>)<EOL>if not MF:<EOL><INDENT>TDL = TL - IHL + FO<EOL><DEDENT>if not FO:<EOL><INDENT>self._buffer[BUFID]['<STR_LIT>'] = info.header<EOL><DEDENT>start = <NUM_LIT:0><EOL>stop = (TDL + <NUM_LIT:7>) // <NUM_LIT:8><EOL>if TDL and all(self._buffer[BUFID]['<STR_LIT>'][start:stop]):<EOL><INDENT>self._dtgram += self.submit(self._buffer[BUFID], checked=True)<EOL>del self._buffer[BUFID]<EOL><DEDENT>
Reassembly procedure.

        Positional arguments:
            * info -- Info, info dict of packets to be reassembled