GPLization banner introduced to *.[hc] files
[sip-router] / parser / digest / digest_parser.h
1 /*
2  * $Id$
3  *
4  * Digest credentials parser
5  *
6  * Copyright (C) 2001-2003 Fhg Fokus
7  *
8  * This file is part of ser, a free SIP server.
9  *
10  * ser is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version
14  *
15  * For a license to use the ser software under conditions
16  * other than those described here, or to purchase support for this
17  * software, please contact iptel.org by e-mail at the following addresses:
18  *    info@iptel.org
19  *
20  * ser is distributed in the hope that it will be useful,
21  * but WITHOUT ANY WARRANTY; without even the implied warranty of
22  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
23  * GNU General Public License for more details.
24  *
25  * You should have received a copy of the GNU General Public License 
26  * along with this program; if not, write to the Free Software 
27  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
28  */
29
30
31
32 #ifndef DIGEST_PARSER_H
33 #define DIGEST_PARSER_H
34
35 #include "../../str.h"
36
37
38 /* Type of algorithm used */
39 typedef enum alg {
40         ALG_UNSPEC = 0,   /* Algorithm parameter not specified */
41         ALG_MD5 = 1,      /* MD5 - default value*/
42         ALG_MD5SESS = 2,  /* MD5-Session */
43         ALG_OTHER = 4     /* Unknown */
44 } alg_t;
45
46
47 /* Quality Of Protection used */
48 typedef enum qop_type { 
49         QOP_UNSPEC = 0,   /* QOP parameter not present in response */
50         QOP_AUTH = 1,     /* Authentication only */
51         QOP_AUTHINT = 2,  /* Authentication with integrity checks */
52         QOP_OTHER = 4     /* Unknown */
53 } qop_type_t;
54
55
56 /* Algorithm structure */
57 struct algorithm {
58         str alg_str;       /* The original string representation */
59         alg_t alg_parsed;  /* Parsed value */
60 };
61
62
63 /* QOP structure */
64 struct qp {
65         str qop_str;           /* The original string representation */
66         qop_type_t qop_parsed; /* Parsed value */
67 };
68
69
70 /*
71  * Parsed digest credentials
72  */
73 typedef struct dig_cred {
74         str username;         /* Username */
75         str realm;            /* Realm */
76         str nonce;            /* Nonce value */
77         str uri;              /* URI */
78         str response;         /* Response string */
79         str algorithm;        /* Algorithm in string representation */
80         struct algorithm alg; /* Type of algorithm used */
81         str cnonce;           /* Cnonce value */
82         str opaque;           /* Opaque data string */
83         struct qp qop;        /* Quality Of Protection */
84         str nc;               /* Nonce count parameter */
85 } dig_cred_t;
86
87
88 /*
89  * Initialize digest parser
90  */
91 void init_digest_parser(void);
92
93
94 /*
95  * Initialize a digest credentials structure
96  */
97 void init_dig_cred(dig_cred_t* _c);
98
99
100 /*
101  * We support Digest authentication only
102  *
103  * Returns:
104  *  0 - if everything is OK
105  * -1 - Error while parsing
106  *  1 - Unknown scheme
107  */
108 int parse_digest_cred(str* _s, dig_cred_t* _c);
109
110
111 #endif /* DIGEST_PARSER_H */