Preheat the oven to 180 C / Gas 4. Grease a swiss roll tin; line with parchment, and grease and flour parchment.
To make the sponge: In a large mixing bowl, beat egg yolks at high speed until light and fluffy. Gradually add sugar, beating until mixture is thick and light-coloured. Add flour and cocoa, beating on low speed.
In another bowl, beat egg whites until soft peaks form; fold into above cake mixture. Fold in gently until no streaks of white remaining.
Spread cake mixture evenly in prepared tin. Bake in the preheated oven for 15 minutes or until cake springs back when touched lightly. Cover with parchment and cool slightly on wire rack.
Dust a clean towel with icing sugar. Run a knife around the edge of the tin, and turn the warm cake out onto the towel. Remove and discard the baking parchment. Starting at the short edge of the cake, roll the cake up with the towel. Cool for 30 minutes.
For the filling, combine flour and milk in a saucepan. Cook over low heat; stirring until thick. Cool.
In a mixing bowl, cream sugar, butter and vanilla. Add cooled flour and milk mixture; beat until fluffy. Fold in walnuts if desired. Spread on cake; roll up as you would a swiss roll, starting from one short end.
For icing, beat butter until fluffy in a small bowl. Beat in sugar, cocoa and coffee. Spread over cake, using a fork to create a bark-like effect. Dust with icing sugar and sprinkle with nuts if desired.