fe7f9ea537a1c20d5565b0d101ad20f7629b7073
[sip-router] / parser / digest / digest.h
1 /*
2  * $Id$
3  *
4  * Digest credentials parser interface
5  */
6
7 #ifndef DIGEST_H
8 #define DIGEST_H
9
10 #include "digest_parser.h"
11 #include "../hf.h"         /* struct hdr_field */
12 #include "../msg_parser.h"
13
14
15 typedef struct auth_body {
16              /* This is pointer to header field containing
17               * parsed authorized digest credentials. This
18               * pointer is set in sip_msg->{authorization,proxy_auth}
19               * hooks.
20               *
21               * This is necessary for functions called after
22               * {www,proxy}_authorize, these functions need to know
23               * which credentials are authorized and they will simply
24               * look into 
25               * sip_msg->{authorization,proxy_auth}->parsed->authorized
26               */
27         struct hdr_field* authorized;
28         dig_cred_t digest;           /* Parsed digest credentials */
29         unsigned char stale;         /* Flag is set if nonce is stale */
30         int nonce_retries;           /* How many times the nonce was used */
31 } auth_body_t;
32
33
34 /*
35  * Errors returned by check_dig_cred
36  */
37 typedef enum dig_err {
38         E_DIG_OK = 0,        /* Everything is OK */
39         E_DIG_USERNAME  = 1, /* Username missing */
40         E_DIG_REALM = 2,     /* Realm missing */
41         E_DIG_NONCE = 4,     /* Nonce value missing */
42         E_DIG_URI = 8,       /* URI missing */
43         E_DIG_RESPONSE = 16, /* Response missing */
44         E_DIG_CNONCE = 32,   /* CNONCE missing */
45         E_DIG_NC = 64,       /* Nonce-count missing */
46 } dig_err_t;
47
48
49 /*
50  * Parse digest credentials
51  */
52 int parse_credentials(struct hdr_field* _h);
53
54
55 /*
56  * Free all memory associated with parsed
57  * structures
58  */
59 void free_credentials(auth_body_t** _b);
60
61
62 /*
63  * Print dig_cred structure to stdout
64  */
65 void print_cred(dig_cred_t* _c);
66
67
68 /*
69  * Mark credentials as authorized
70  */
71 int mark_authorized_cred(struct sip_msg* _m, struct hdr_field* _h);
72
73
74 /*
75  * Get pointer to authorized credentials
76  */
77 int get_authorized_cred(struct hdr_field* _f, struct hdr_field** _h);
78
79
80 /*
81  * Check if credentials are correct
82  * (check of semantics)
83  */
84 dig_err_t check_dig_cred(dig_cred_t* _c);
85
86
87 #endif /* DIGEST_H */