From: Super User Date: Mon, 28 Apr 2008 17:34:33 +0000 (+0200) Subject: Merge branch 'master' of ssh://jolly@www.mISDN.org/var/git/lcr X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=commitdiff_plain;h=f94f30b0c56ae49c436ee588cd0696cc1b9db9aa;hp=d70150d0470f76ea769da623ac8f50e828609b61 Merge branch 'master' of ssh://jolly@mISDN.org/var/git/lcr Conflicts: chan_lcr.c --- diff --git a/chan_lcr.c b/chan_lcr.c index 382025b..3e62d1a 100644 --- a/chan_lcr.c +++ b/chan_lcr.c @@ -135,6 +135,8 @@ CHAN_LCR_STATE // state description structure int lcr_debug=1; int mISDN_created=1; +char lcr_type[]="LCR"; + int lcr_sock = -1; @@ -788,6 +790,47 @@ static void send_setup_to_lcr(struct chan_call *call) call->state = CHAN_LCR_STATE_OUT_SETUP; } +#if 0 +CHRISTIAN: das war ein konflikt beim pullen +siehe anderes lcr_request(); +bedenke: das ast_log muss noch üeberall eingepflegt werden + +static struct ast_channel *lcr_request(const char *type, int format, void *data, int *cause) +{ + struct chan_call *call=alloc_call(); + + if (call) { +#warning hier muss jetzt wohl eine Ref angefordert werden! + ast=lcr_ast_new(call, ext, NULL, 0 ); + + if (ast) { + call->ast=ast; + } else { + ast_log(LOG_WARNING, "Could not create new Asterisk Channel\n"); + free_call(call); + } + } else { + ast_log(LOG_WARNING, "Could not create new Lcr Call Handle\n"); + } + + return ast; +} + + struct ast_channel *ast=NULL; + + char buf[128]; + char *port_str, *ext, *p; + int port; + + ast_copy_string(buf, data, sizeof(buf)-1); + p=buf; + port_str=strsep(&p, "/"); + ext=strsep(&p, "/"); + ast_verbose("portstr:%s ext:%s\n",port_str, ext); + + sprintf(buf,"%s/%s",lcr_type,(char*)data); +#endif + /* * send dialing info to LCR * this function is called, when setup acknowledge is received and dialing @@ -841,9 +884,9 @@ static struct ast_channel *lcr_request(const char *type, int format, void *data, */ static int lcr_call(struct ast_channel *ast, char *dest, int timeout) { - struct lcr_pvt *lcr=ast->tech_pvt; + struct chan_call *call=ast->tech_pvt; - if (!lcr) return -1; + if (!call) return -1; char buf[128]; char *port_str, *dad, *p; @@ -861,7 +904,8 @@ static int lcr_call(struct ast_channel *ast, char *dest, int timeout) if (lcr_debug) ast_verbose("Call: ext:%s dest:(%s) -> dad(%s) \n", ast->exten,dest, dad); - +#warning hier müssen wi eine der geholten REFs nehmen und ein SETUP schicken, die INFOS zum SETUP stehen im Ast pointer drin, bzw. werden hier übergeben. + return 0; } @@ -892,13 +936,19 @@ digits kommen, koennen aber nicht verwendet werden. static int lcr_answer(struct ast_channel *c) { - struct lcr_pvt *lcr=c->tech_pvt; + struct chan_call *call=c->tech_pvt; return 0; } static int lcr_hangup(struct ast_channel *ast) { +<<<<<<< HEAD:chan_lcr.c struct chan_call *call = ast->tech_pvt; +======= + struct chan_call *call=c->tech_pvt; + c->tech_pvt=NULL; +} +>>>>>>> 350450b9cadc6107449fe2630843d4f898f680b7:chan_lcr.c /* disconnect asterisk, maybe not required */ ast->tech_pvt = NULL; @@ -929,13 +979,13 @@ static int lcr_hangup(struct ast_channel *ast) static int lcr_write(struct ast_channel *c, struct ast_frame *f) { - struct lcr_pvt *lcrm= c->tech_pvt; + struct chan_call *callm= c->tech_pvt; } static struct ast_frame *lcr_read(struct ast_channel *c) { - struct lcr_pvt *lcr = c->tech_pvt; + struct chan_call *call = c->tech_pvt; } static int lcr_indicate(struct ast_channel *c, int cond, const void *data, size_t datalen) @@ -971,7 +1021,7 @@ static int lcr_indicate(struct ast_channel *c, int cond, const void *data, size_ } static struct ast_channel_tech lcr_tech = { - .type="lcr", + .type=lcr_type, .description="Channel driver for connecting to Linux-Call-Router", .capabilities=AST_FORMAT_ALAW, .requester=lcr_request, @@ -988,6 +1038,34 @@ static struct ast_channel_tech lcr_tech = { .properties=0 }; +#warning das muss mal aus der config datei gelesen werden: +char lcr_context[]="from-lcr"; + +static struct ast_channel *lcr_ast_new(struct chan_call *call, char *exten, char *callerid, int ref) +{ + struct ast_channel *tmp; + char *cid_name = 0, *cid_num = 0; + + + if (callerid) + ast_callerid_parse(callerid, &cid_name, &cid_num); + + tmp = ast_channel_alloc(1, AST_STATE_RESERVED, cid_num, cid_name, "", exten, "", 0, "%s/%d", lcr_type, ref); + + if (tmp) { + tmp->tech = &lcr_tech; + tmp->writeformat = AST_FORMAT_ALAW; + tmp->readformat = AST_FORMAT_ALAW; + + ast_copy_string(tmp->context, lcr_context, AST_MAX_CONTEXT); + + } + + return tmp; +} + + + /* * cli */ diff --git a/chan_lcr.h b/chan_lcr.h index 45a5a94..f1842c6 100644 --- a/chan_lcr.h +++ b/chan_lcr.h @@ -18,6 +18,8 @@ struct chan_call { unsigned long bchannel_handle; /* reference to bchannel, if set */ unsigned short bridge_id; /* 0 = off, equal ids are bridged */ + + struct ast_channel *ast; }; enum {