Protocol file path is optional
Create directory for the protocol file if required, and exit if its creation fails
call() doesn't need to know the payload type