Index: funcs/func_cdr.c =================================================================== --- funcs/func_cdr.c (revision 58874) +++ funcs/func_cdr.c (working copy) @@ -106,6 +106,14 @@ ast_cdr_setaccount(chan, value); else if (!strcasecmp(args.variable, "userfield")) ast_cdr_setuserfield(chan, value); + else if (!strcasecmp(args.variable, "userfield2")) + ast_cdr_setuserfield2(chan, value); + else if (!strcasecmp(args.variable, "userfield3")) + ast_cdr_setuserfield3(chan, value); + else if (!strcasecmp(args.variable, "userfield4")) + ast_cdr_setuserfield4(chan, value); + else if (!strcasecmp(args.variable, "userfield5")) + ast_cdr_setuserfield5(chan, value); else if (!strcasecmp(args.variable, "amaflags")) ast_cdr_setamaflags(chan, value); else if (chan->cdr) Index: include/asterisk/cdr.h =================================================================== --- include/asterisk/cdr.h (revision 58874) +++ include/asterisk/cdr.h (working copy) @@ -87,6 +87,14 @@ char uniqueid[32]; /* User field */ char userfield[AST_MAX_USER_FIELD]; + /* User field */ + char userfield2[AST_MAX_USER_FIELD]; + /* User field */ + char userfield3[AST_MAX_USER_FIELD]; + /* User field */ + char userfield4[AST_MAX_USER_FIELD]; + /* User field */ + char userfield5[AST_MAX_USER_FIELD]; /* A linked list for variables */ struct varshead varshead; @@ -271,6 +279,10 @@ int ast_cdr_setuserfield(struct ast_channel *chan, const char *userfield); +int ast_cdr_setuserfield2(struct ast_channel *chan, const char *userfield2); +int ast_cdr_setuserfield3(struct ast_channel *chan, const char *userfield3); +int ast_cdr_setuserfield4(struct ast_channel *chan, const char *userfield4); +int ast_cdr_setuserfield5(struct ast_channel *chan, const char *userfield5); int ast_cdr_appenduserfield(struct ast_channel *chan, const char *userfield); Index: main/cdr.c =================================================================== --- main/cdr.c (revision 58874) +++ main/cdr.c (working copy) @@ -669,7 +669,51 @@ return 0; } +int ast_cdr_setuserfield2(struct ast_channel *chan, const char *userfield2) +{ + struct ast_cdr *cdr = chan->cdr; + for ( ; cdr ; cdr = cdr->next) { + if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + ast_copy_string(cdr->userfield2, userfield2, sizeof(cdr->userfield2)); + } + + return 0; +} +int ast_cdr_setuserfield3(struct ast_channel *chan, const char *userfield3) +{ + struct ast_cdr *cdr = chan->cdr; + + for ( ; cdr ; cdr = cdr->next) { + if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + ast_copy_string(cdr->userfield3, userfield3, sizeof(cdr->userfield3)); + } + + return 0; +} +int ast_cdr_setuserfield4(struct ast_channel *chan, const char *userfield4) +{ + struct ast_cdr *cdr = chan->cdr; + + for ( ; cdr ; cdr = cdr->next) { + if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + ast_copy_string(cdr->userfield4, userfield4, sizeof(cdr->userfield4)); + } + + return 0; +} +int ast_cdr_setuserfield5(struct ast_channel *chan, const char *userfield5) +{ + struct ast_cdr *cdr = chan->cdr; + + for ( ; cdr ; cdr = cdr->next) { + if (!ast_test_flag(cdr, AST_CDR_FLAG_LOCKED)) + ast_copy_string(cdr->userfield5, userfield5, sizeof(cdr->userfield5)); + } + + return 0; +} + int ast_cdr_appenduserfield(struct ast_channel *chan, const char *userfield) { struct ast_cdr *cdr = chan->cdr;