== AsteriskVer0-2-0/res/res_parking.c == * int ast_bridge_call(struct ast_channel *chan, struct ast_channel *peer, int allowredirect, int allowdisconnect) * if (chan->_state != AST_STATE_UP) { * if (ast_answer(chan)) return -1; * } * for (;;) { * res = ast_channel_bridge(chan, peer, (allowdisconnect ? AST_BRIDGE_DTMF_CHANNEL_0 : 0) + (allowredirect ? AST_BRIDGE_DTMF_CHANNEL_1 : 0), &f, &who); * if (res < 0) return -1; * if (!f || ((f->frametype == AST_FRAME_CONTROL) && ((f->subclass == AST_CONTROL_HANGUP) || (f->subclass == AST_CONTROL_BUSY) || (f->subclass == AST_CONTROL_CONGESTION)))) { * res = -1; * break; * } * if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_RINGING)) { * } * if ((f->frametype == AST_FRAME_CONTROL) && (f->subclass == AST_CONTROL_OPTION)) { * } * if (f && (f->frametype == AST_FRAME_DTMF) && (who == chan) && allowdisconnect && (f->subclass == '*')) { * res = -1; * break; * } * if ((f->frametype == AST_FRAME_DTMF) && (who == peer) && allowredirect && (f->subclass == '#')) { * } else { * } * } * return res; * channel.c * ast_channel_bridge * ÀÔ·ÂµÈ ³»¿ëÀÌ AST_FRAME_CONTROL À̸é, return 0 * ÀÔ·ÂµÈ ³»¿ëÀº fo ¿¡, ´©°¡¿¡°Ô¼­ ÀÔ·ÂµÈ °ÍÀΰ¡´Â rc ¿¡ assign {{{ if ((f->frametype == AST_FRAME_CONTROL) && !(flags & AST_BRIDGE_IGNORE_SIGS)) { *fo = f; *rc = who; res = 0; break; } }}}