im' not that kind of code guro to do a packport, but i looked a bit into the code, and i saw that in asterisk 1.4 chan_zap.c the causes are set in function static void *pri_dchannel(void *vpri) but you tried it in static int zt_call(struct ast_channel *ast, char *rdest, int timeout) maybe that helps you...