Вход | Регистрация
Вы здесь: Главная / Форум / О Портале / Движок форума / как правильно оформить новую функцию в астериске

как правильно оформить новую функцию в астериске

Сообщений: 1

как правильно оформить новую функцию в астериске

Добрый день може кто-нибудь подскажет как правильно оформить функцию замены строк в астериске. Ниже предоставлю код который надо встроить в астериск. Подскажите пожалуйста где я допустил ошибку. Астериск видит эту функцию но падает изза нее.
Функция которую я написал чтобы встроить в астериск:
// str_replace.h
// str_replace.h
#include <string.h>
#include <stdlib.h>
/*
mainStr - main string
searchStr - search string
subStr - sub string
*/

char *str_replace(const char* mainStr, const char* searchStr, const char* subStr) {
const int search_len = strlen(searchStr);
const int sub_len = strlen(subStr);
const char *p, *begin;
char *r, *result;

int count = 0;
for (p = mainStr; p = strstr(p, searchStr); p += search_len) ++count;

r = result = (char*)malloc(strlen(mainStr) + (sub_len - search_len) * count + 1);

begin = mainStr;
for (p = mainStr; p = strstr(begin, searchStr); begin = p + search_len) {
strncpy(r, begin, p - begin);
r += p - begin;
strcpy(r, subStr);
r += sub_len;
}
strcpy(r, begin);
return result;
}

/*
Sample:
#include <stdio.h>
#include "str_replace.h"
int main()
{
char ar[] = "123sss45sssss";
char* t;
t = str_replace(ar1,"s","-");
printf(t);
return 0;
}
// Result: 123---45-----
*/

А теперь эта эе функция но встроенная в астериск.
Изза acf_strreplace астериск падает. Подскажите пожалуйста кто разбирается где ниже я допустил ошибку!!!

// func_string.c
...
int acf_strreplace(struct ast_channel *chan, char *cmd, char *parse, char *buffer, size_t buflen)
{
AST_DECLARE_APP_ARGS(args,
AST_APP_ARG(mainStr);
AST_APP_ARG(searchStr);
AST_APP_ARG(subStr);
);


AST_STANDARD_APP_ARGS(args, parse);


const int search_len = strlen(args.searchStr);
const int sub_len = strlen(args.subStr);
const char *p, *begin;
char *r, *result;

int count = 0;
for (p = args.mainStr; p = strstr(p, args.searchStr); p += search_len) ++count;

r = result = (char*)ast_malloc(strlen(args.mainStr) + (sub_len - search_len) * count + 1);

begin = args.mainStr;
for (p = args.mainStr; p = strstr(begin, args.searchStr); begin = p + search_len) {
strncpy(r, begin, p - begin);
r += p - begin;
strcpy(r, args.subStr);
r += sub_len;
}
strcpy(r, begin);


//ast_log(LOG_DEBUG, "%d was the lucky number in range [%d,%d]\n",response_int, min_int, max_int);
ast_log(LOG_DEBUG, "Hello Debugger!!!\n");
//r = "Hello";
//result = "Hello Debugger!!!";

snprintf(buffer, buflen, "%s", result);

ast_free(result);

return 0;
}

static struct ast_custom_function strreplace_function = {
.name = "STRREPLACE",
.synopsis = "Sub string",
.syntax = "STRREPLACE(mainStr|searchStr|subStr)",
.desc = "Sub string",
.read = acf_strreplace,
};
...
2008-05-27 13:15

Avatara of IgorG
Откуда: Омск
Сообщений: 478

Re: как правильно оформить новую функцию в астериске

Желательно пользоваться цитированием при создании таких сообщений. При падении asterisk, запущенного с ключём 'g', должен создаться core. gdb в помощь.
OpenSUSE 11.2 / Asterisk 1.6.x / Vicidial / UniMRCP
2008-05-27 19:39

Avatara of litnimax
Откуда: Москва
Сообщений: 3421

Re: как правильно оформить новую функцию в астериске

Расскажите подробнее что делает Ваша функция.
http://pbxware.ru - все для Asterisk! || Switchvox - сделано на Asterisk! Подробности на http://switchvox.ru
2008-05-28 11:09

Avatara of IgorG
Откуда: Омск
Сообщений: 478

Re: как правильно оформить новую функцию в астериске

Могу я сказать, похоже она должна в строке искать подстроку и заменять её на другую.
OpenSUSE 11.2 / Asterisk 1.6.x / Vicidial / UniMRCP
2008-05-28 12:19

Откуда: Киев
Сообщений: 749

Re: как правильно оформить новую функцию в астериске

я бы взял шаблон из BASE64_DECODE и не мучальсо.
2008-06-01 06:43

Откуда: Киев
Сообщений: 749

Re: как правильно оформить новую функцию в астериске

а не пробывали закоментить все вызовы тип strncopy?
ибо чтото мне говорит что они из какойто библиотеки, которая астериском НЕ загружаеться.
была когдато похожее чтото
таже funcs/func_cut.c их не пользует.
2008-06-01 06:49

Добавить страницу в закладки:  Delicious Google Slashdot Yahoo Yandex.ru Reddit Digg Technorati Bobrdobr.ru Newsland.ru Smi2.ru Rumarkz.ru Vaau.ru Memori.ru Rucity.com Moemesto.ru News2.ru Mister-Wong.ru Myscoop.ru 100zakladok.ru