diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c index 87a13af538f3b7b8e1b3f04fae836f09cbb764e5..b8ebf1b13bea711e3e1cffba3c9675a5b1e7513d 100644 --- a/pbx/pbx_dundi.c +++ b/pbx/pbx_dundi.c @@ -330,31 +330,28 @@ static struct dundi_transaction *find_transaction(struct dundi_hdr *hdr, struct ((trans->dtrans == (ntohs(hdr->strans) & 32767)) && (!hdr->dtrans))) /* We match their destination */) { if (hdr->strans) trans->dtrans = ntohs(hdr->strans) & 32767; - break; + return trans; } } - if (!trans) { - switch(hdr->cmdresp & 0x7f) { - case DUNDI_COMMAND_DPDISCOVER: - case DUNDI_COMMAND_EIDQUERY: - case DUNDI_COMMAND_PRECACHERQ: - case DUNDI_COMMAND_REGREQ: - case DUNDI_COMMAND_NULL: - case DUNDI_COMMAND_ENCRYPT: - if (hdr->strans) { - /* Create new transaction */ - trans = create_transaction(NULL); - if (trans) { - memcpy(&trans->addr, sin, sizeof(trans->addr)); - trans->dtrans = ntohs(hdr->strans) & 32767; - } else - ast_log(LOG_WARNING, "Out of memory!\n"); - } + + switch(hdr->cmdresp & 0x7f) { + case DUNDI_COMMAND_DPDISCOVER: + case DUNDI_COMMAND_EIDQUERY: + case DUNDI_COMMAND_PRECACHERQ: + case DUNDI_COMMAND_REGREQ: + case DUNDI_COMMAND_NULL: + case DUNDI_COMMAND_ENCRYPT: + if (!hdr->strans) break; - default: + /* Create new transaction */ + if (!(trans = create_transaction(NULL))) break; - } + memcpy(&trans->addr, sin, sizeof(trans->addr)); + trans->dtrans = ntohs(hdr->strans) & 32767; + default: + break; } + return trans; } @@ -1985,8 +1982,8 @@ static int socket_read(int *id, int fd, short events, void *cbdata) int res; struct dundi_hdr *h; char buf[MAX_PACKET_SIZE]; - socklen_t len; - len = sizeof(sin); + socklen_t len = sizeof(sin); + res = recvfrom(netsocket, buf, sizeof(buf) - 1, 0,(struct sockaddr *) &sin, &len); if (res < 0) { if (errno != ECONNREFUSED) @@ -1994,11 +1991,11 @@ static int socket_read(int *id, int fd, short events, void *cbdata) return 1; } if (res < sizeof(struct dundi_hdr)) { - ast_log(LOG_WARNING, "midget packet received (%d of %d min)\n", res, (int)sizeof(struct dundi_hdr)); + ast_log(LOG_WARNING, "midget packet received (%d of %d min)\n", res, sizeof(struct dundi_hdr)); return 1; } buf[res] = '\0'; - h = (struct dundi_hdr *)buf; + h = (struct dundi_hdr *) buf; if (dundidebug) dundi_showframe(h, 1, &sin, res - sizeof(struct dundi_hdr)); AST_LIST_LOCK(&peers); @@ -2777,22 +2774,23 @@ static struct dundi_transaction *create_transaction(struct dundi_peer *p) tid = get_trans_id(); if (tid < 1) return NULL; - trans = ast_calloc(1, sizeof(*trans)); - if (trans) { - if (global_storehistory) { - trans->start = ast_tvnow(); - ast_set_flag(trans, FLAG_STOREHIST); - } - trans->retranstimer = DUNDI_DEFAULT_RETRANS_TIMER; - trans->autokillid = -1; - if (p) { - apply_peer(trans, p); - if (!p->sentfullkey) - ast_set_flag(trans, FLAG_SENDFULLKEY); - } - trans->strans = tid; - AST_LIST_INSERT_HEAD(&alltrans, trans, all); + if (!(trans = ast_calloc(1, sizeof(*trans)))) + return NULL; + + if (global_storehistory) { + trans->start = ast_tvnow(); + ast_set_flag(trans, FLAG_STOREHIST); + } + trans->retranstimer = DUNDI_DEFAULT_RETRANS_TIMER; + trans->autokillid = -1; + if (p) { + apply_peer(trans, p); + if (!p->sentfullkey) + ast_set_flag(trans, FLAG_SENDFULLKEY); } + trans->strans = tid; + AST_LIST_INSERT_HEAD(&alltrans, trans, all); + return trans; }