00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef _CDR_H
00018
#define _CDR_H
00019
00020
#include <asterisk/channel.h>
00021
#include <sys/time.h>
00022
00023 #define AST_CDR_FLAG_POSTED (1 << 1)
00024 #define AST_CDR_FLAG_LOCKED (1 << 2)
00025 #define AST_CDR_FLAG_CHILD (1 << 3)
00026
00027 #define AST_CDR_NOANSWER (1 << 0)
00028 #define AST_CDR_BUSY (1 << 1)
00029 #define AST_CDR_ANSWERED (1 << 2)
00030 #define AST_CDR_FAILED (1 << 3)
00031
00032
00033 #define AST_CDR_OMIT (1)
00034 #define AST_CDR_BILLING (2)
00035 #define AST_CDR_DOCUMENTATION (3)
00036
00037 #define AST_MAX_USER_FIELD 256
00038
00039
struct ast_channel;
00040
00041
00042 struct ast_cdr {
00043
00044 char clid[
AST_MAX_EXTENSION];
00045
00046 char src[
AST_MAX_EXTENSION];
00047
00048 char dst[
AST_MAX_EXTENSION];
00049
00050 char dcontext[
AST_MAX_EXTENSION];
00051
00052 char channel[
AST_MAX_EXTENSION];
00053
00054 char dstchannel[
AST_MAX_EXTENSION];
00055
00056 char lastapp[
AST_MAX_EXTENSION];
00057
00058 char lastdata[
AST_MAX_EXTENSION];
00059
00060 struct timeval start;
00061
00062 struct timeval answer;
00063
00064 struct timeval end;
00065
00066 int duration;
00067
00068 int billsec;
00069
00070 int disposition;
00071
00072 int amaflags;
00073
00074 char accountcode[20];
00075
00076 int flags;
00077
00078 char uniqueid[32];
00079
00080 char userfield[
AST_MAX_USER_FIELD];
00081 struct ast_cdr *
next;
00082 };
00083
00084 typedef int (*
ast_cdrbe)(
struct ast_cdr *cdr);
00085
00086
00087
00088
00089
00090
extern struct ast_cdr *
ast_cdr_alloc(
void);
00091
00092
00093
00094
00095
00096
extern void ast_cdr_free(
struct ast_cdr *cdr);
00097
00098
00099
00100
00101
00102
00103
00104
00105
extern int ast_cdr_init(
struct ast_cdr *cdr,
struct ast_channel *chan);
00106
00107
00108
00109
00110
00111
00112
00113
00114
extern int ast_cdr_setcid(
struct ast_cdr *cdr,
struct ast_channel *chan);
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
extern int ast_cdr_register(
char *name,
char *desc,
ast_cdrbe be);
00125
00126
00127
00128
00129
00130
00131
extern void ast_cdr_unregister(
char *name);
00132
00133
00134
00135
00136
00137
00138
00139
extern void ast_cdr_start(
struct ast_cdr *cdr);
00140
00141
00142
00143
00144
00145
00146
extern void ast_cdr_answer(
struct ast_cdr *cdr);
00147
00148
00149
00150
00151
00152
00153
extern void ast_cdr_busy(
struct ast_cdr *cdr);
00154
00155
00156
00157
00158
00159
00160
extern void ast_cdr_failed(
struct ast_cdr *cdr);
00161
00162
00163
00164
00165
00166
00167
00168
extern int ast_cdr_disposition(
struct ast_cdr *cdr,
int cause);
00169
00170
00171
00172
00173
00174
00175
00176
extern void ast_cdr_end(
struct ast_cdr *cdr);
00177
00178
00179
00180
00181
00182
00183
00184
extern void ast_cdr_post(
struct ast_cdr *cdr);
00185
00186
00187
00188
00189
00190
00191
00192
extern void ast_cdr_setdestchan(
struct ast_cdr *cdr,
char *chan);
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
extern void ast_cdr_setapp(
struct ast_cdr *cdr,
char *app,
char *data);
00203
00204
00205
00206
00207
00208
00209
00210
extern int ast_cdr_amaflags2int(
char *flag);
00211
00212
00213
00214
00215
00216
00217
00218
extern char *
ast_cdr_disp2str(
int disposition);
00219
00220
00221
00222
00223
00224
00225
extern void ast_cdr_reset(
struct ast_cdr *cdr,
int post);
00226
00227
00228
00229
00230
00231
00232
00233
extern char *
ast_cdr_flags2str(
int flags);
00234
00235
extern int ast_cdr_setaccount(
struct ast_channel *chan,
char *account);
00236
extern int ast_cdr_setamaflags(
struct ast_channel *chan,
char *account);
00237
00238
00239
extern int ast_cdr_setuserfield(
struct ast_channel *chan,
char *userfield);
00240
extern int ast_cdr_appenduserfield(
struct ast_channel *chan,
char *userfield);
00241
00242
00243
00244
extern int ast_cdr_update(
struct ast_channel *chan);
00245
00246
00247
extern int ast_default_amaflags;
00248
00249
extern char ast_default_accountcode[20];
00250
00251 #define ast_cdr_has_flag(cdr, flag) ((cdr)->flags & (flag))
00252 #define ast_cdr_add_flag(cdr, flag) ((cdr)->flags |= (flag))
00253 #define ast_cdr_del_flag(cdr, flag) ((cdr)->flags &= ~(flag))
00254
00255
extern void ast_cdr_append(
struct ast_cdr *cdr,
struct ast_cdr *newcdr);
00256
00257
#endif