root/src/kits/print/PrintTransportAddOn.cpp
#include "PrintTransportAddOn.h"

// We don't support multiple instances of the same transport add-on
static BDataIO* gTransport = NULL;

extern "C" _EXPORT BDataIO *init_transport(BMessage *msg)
{
        if (msg == NULL || gTransport != NULL)
                return NULL;
                
        const char *spool_path = msg->FindString("printer_file");

        if (spool_path && *spool_path != '\0') {
                BDirectory printer(spool_path);

                if (printer.InitCheck() == B_OK) {
                        gTransport = instantiate_transport(&printer, msg);
                        return gTransport;
                };
        };
        
        return NULL;
}

extern "C" _EXPORT void exit_transport()
{
        if (gTransport) {
                delete gTransport;
                gTransport = NULL;      
        }
}