00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef _UAC_AUTH_H_
00030 #define _UAC_AUTH_H_
00031
00032 #include "../../parser/msg_parser.h"
00033
00034 struct uac_credential {
00035 str realm;
00036 str user;
00037 str passwd;
00038 struct uac_credential *next;
00039 };
00040
00041 struct authenticate_body {
00042 int flags;
00043 str realm;
00044 str domain;
00045 str nonce;
00046 str opaque;
00047 str qop;
00048 str *nc;
00049 str *cnonce;
00050 };
00051
00052 #define AUTHENTICATE_MD5 (1<<0)
00053 #define AUTHENTICATE_MD5SESS (1<<1)
00054 #define AUTHENTICATE_STALE (1<<2)
00055 #define QOP_AUTH (1<<3)
00056 #define QOP_AUTH_INT (1<<4)
00057
00058 #define HASHLEN 16
00059 typedef char HASH[HASHLEN];
00060
00061 #define HASHHEXLEN 32
00062 typedef char HASHHEX[HASHHEXLEN+1];
00063
00064 int has_credentials(void);
00065
00066 int add_credential( unsigned int type, void *val);
00067
00068 void destroy_credentials(void);
00069
00070 struct hdr_field *get_autenticate_hdr(struct sip_msg *rpl, int rpl_code);
00071
00072 int uac_auth( struct sip_msg *msg);
00073
00074 void do_uac_auth(str *method, str *uri,
00075 struct uac_credential *crd,
00076 struct authenticate_body *auth,
00077 HASHHEX response);
00078
00079 #endif