Index: channels/chan_oss.c =================================================================== --- channels/chan_oss.c (revision 50704) +++ channels/chan_oss.c (working copy) @@ -692,10 +692,21 @@ { struct chan_oss_pvt *o = c->tech_pvt; struct ast_frame f = { 0, }; + char *flags = ast_strdupa(dest), *destcopy; + destcopy = strsep(&flags, "/"); ast_verbose(" << Call to '%s' on console from <%s><%s><%s> >>\n", dest, c->cid.cid_dnid, c->cid.cid_num, c->cid.cid_name); - if (o->autoanswer) { + if (flags && strcasecmp(flags, "answer") == 0) { + f.frametype = AST_FRAME_CONTROL; + f.subclass = AST_CONTROL_ANSWER; + ast_queue_frame(c, &f); + } else if (flags && strcasecmp(flags, "noanswer") == 0) { + f.frametype = AST_FRAME_CONTROL; + f.subclass = AST_CONTROL_RINGING; + ast_queue_frame(c, &f); + ring(o, AST_CONTROL_RING); + } else if (o->autoanswer) { ast_verbose( " << Auto-answered >> \n" ); f.frametype = AST_FRAME_CONTROL; f.subclass = AST_CONTROL_ANSWER; @@ -915,12 +926,17 @@ int format, void *data, int *cause) { struct ast_channel *c; - struct chan_oss_pvt *o = find_desc(data); + struct chan_oss_pvt *o; + char *data2 = ast_strdupa(data), *slash; + if ((slash = strchr(data2, '/'))) + *slash = '\0'; + o = find_desc(data2); + ast_log(LOG_WARNING, "oss_request ty <%s> data 0x%p <%s>\n", type, data, (char *)data); if (o == NULL) { - ast_log(LOG_NOTICE, "Device %s not found\n", (char *)data); + ast_log(LOG_NOTICE, "Device %s not found\n", (char *)data2); /* XXX we could default to 'dsp' perhaps ? */ return NULL; }