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
00226 extern void ast_cdr_reset(struct ast_cdr *cdr, int flags);
00227
00228
00229
00230
00231
00232
00233
00234 extern char *ast_cdr_flags2str(int flags);
00235
00236 extern int ast_cdr_setaccount(struct ast_channel *chan, char *account);
00237 extern int ast_cdr_setamaflags(struct ast_channel *chan, char *account);
00238
00239
00240 extern int ast_cdr_setuserfield(struct ast_channel *chan, char *userfield);
00241 extern int ast_cdr_appenduserfield(struct ast_channel *chan, char *userfield);
00242
00243
00244
00245 extern int ast_cdr_update(struct ast_channel *chan);
00246
00247
00248 extern int ast_default_amaflags;
00249
00250 extern char ast_default_accountcode[20];
00251
00252 #define ast_cdr_compare_flag(flags, flag) (flags & (flag))
00253 #define ast_cdr_has_flag(cdr, flag) ((cdr)->flags & (flag))
00254 #define ast_cdr_add_flag(cdr, flag) ((cdr)->flags |= (flag))
00255 #define ast_cdr_del_flag(cdr, flag) ((cdr)->flags &= ~(flag))
00256
00257 extern struct ast_cdr *ast_cdr_append(struct ast_cdr *cdr, struct ast_cdr *newcdr);
00258
00259 #endif