I'd suggest you return to FreeCAD and see if you can make it's Booleans work.
But, since you asked "what did you do":
===begin technical explanation===
I imported the STL into TrueSpace and went into PointEdit Mode.
There, it has a tool to add vertexes between any two points.
After adding half a dozen vertexes between the "top" and "bottom" pieces, then the Add Face tool was able to comprehend the geometry desired, and it filled in the missing gap all the way around.
I then used Triangulate to force in the rest of the missing vertexes, and checked to see that it had the correct geometry.
===end technical explanation===
The reason I chose the repair method above is because I've spent a LOT of time with TrueSpace, and I can generally force it to do what I want it to.
But, if had started this model from scratch, I would have done it in OpenSCAD. The code below would generate a shape very similar to yours in just a few seconds. You'd have to tweak the dimensions, but at least this gets the basic shape correct.
###Openscad###
color([0,1,1])difference(){
cylinder(r=25,h=20,center=true,$fn=32);
cylinder(r=10,h=25,center=true,$fn=32);
n=6;
for (i=[0:n-1]){
rotate([0,0,i*(360/n)])translate([25,0,4])rotate([0,-15,0])c ube([20,40,18],center=true);
}
}
color([1,0,1])difference(){
translate([0,0,-10])cylinder(r=35,h=4,center=true,$fn=32);
cylinder(r=2,h=25,center=true,$fn=32);
translate([32,0,-10])cube([8,8,8],center=true);
}