/* $Id$ */ /* * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com) * Copyright (C) 2003-2008 Benny Prijono * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef __PJSIP_AUTH_SIP_AUTH_MSG_H__ #define __PJSIP_AUTH_SIP_AUTH_MSG_H__ #include PJ_BEGIN_DECL /** * @addtogroup PJSIP_MSG_HDR * @{ */ /** * Common credential structure represents common credential fields * present in Authorization/Proxy-Authorization header. */ struct pjsip_common_credential { pj_str_t realm; /**< Credential's realm. */ pjsip_param other_param; /**< Other parameters. */ }; /** * @see pjsip_common_credential */ typedef struct pjsip_common_credential pjsip_common_credential; /** * This structure describe credential used in Authorization and * Proxy-Authorization header for digest authentication scheme. */ struct pjsip_digest_credential { pj_str_t realm; /**< Realm of the credential */ pjsip_param other_param; /**< Other parameters. */ pj_str_t username; /**< Username parameter. */ pj_str_t nonce; /**< Nonce parameter. */ pj_str_t uri; /**< URI parameter. */ pj_str_t response; /**< Response digest. */ pj_str_t algorithm; /**< Algorithm. */ pj_str_t cnonce; /**< Cnonce. */ pj_str_t opaque; /**< Opaque value. */ pj_str_t qop; /**< Quality of protection. */ pj_str_t nc; /**< Nonce count. */ }; /** * @see pjsip_digest_credential */ typedef struct pjsip_digest_credential pjsip_digest_credential; /** * This structure describe credential used in Authorization and * Proxy-Authorization header for PGP authentication scheme. */ struct pjsip_pgp_credential { pj_str_t realm; /**< Realm. */ pjsip_param other_param; /**< Other parameters. */ pj_str_t version; /**< Version parameter. */ pj_str_t signature; /**< Signature parameter. */ pj_str_t signed_by; /**< Signed by parameter. */ pj_str_t nonce; /**< Nonce parameter. */ }; /** * @see pjsip_pgp_credential */ typedef struct pjsip_pgp_credential pjsip_pgp_credential; /** * This structure describes SIP Authorization header (and also SIP * Proxy-Authorization header). */ struct pjsip_authorization_hdr { /** Standard header fiends. */ PJSIP_DECL_HDR_MEMBER(struct pjsip_authorization_hdr); /** Authorization scheme. */ pj_str_t scheme; /** Type of credentials, depending on the scheme. */ union { pjsip_common_credential common; /**< Common fields. */ pjsip_digest_credential digest; /**< Digest credentials. */ pjsip_pgp_credential pgp; /**< PGP credentials. */ } credential; }; /** * @see pjsip_authorization_hdr. */ typedef struct pjsip_authorization_hdr pjsip_authorization_hdr; /** SIP Proxy-Authorization header shares the same structure as SIP Authorization header. */ typedef struct pjsip_authorization_hdr pjsip_proxy_authorization_hdr; /** * Create SIP Authorization header. * @param pool Pool where memory will be allocated from. * @return SIP Authorization header. */ PJ_DECL(pjsip_authorization_hdr*) pjsip_authorization_hdr_create(pj_pool_t *pool); /** * Create SIP Proxy-Authorization header. * @param pool Pool where memory will be allocated from. * @return SIP Proxy-Authorization header. */ PJ_DECL(pjsip_proxy_authorization_hdr*) pjsip_proxy_authorization_hdr_create(pj_pool_t *pool); /** * This structure describes common fields in authentication challenge * headers (WWW-Authenticate and Proxy-Authenticate). */ struct pjsip_common_challenge { pj_str_t realm; /**< Realm for the challenge. */ pjsip_param other_param; /**< Other parameters. */ }; /** * @see pjsip_common_challenge */ typedef struct pjsip_common_challenge pjsip_common_challenge; /** * This structure describes authentication challenge used in Proxy-Authenticate * or WWW-Authenticate for digest authentication scheme. */ struct pjsip_digest_challenge { pj_str_t realm; /**< Realm for the challenge. */ pjsip_param other_param; /**< Other parameters. */ pj_str_t domain; /**< Domain. */ pj_str_t nonce; /**< Nonce challenge. */ pj_str_t opaque; /**< Opaque value. */ int stale; /**< Stale parameter. */ pj_str_t algorithm; /**< Algorithm parameter. */ pj_str_t qop; /**< Quality of protection. */ }; /** * @see pjsip_digest_challenge */ typedef struct pjsip_digest_challenge pjsip_digest_challenge; /** * This structure describes authentication challenge used in Proxy-Authenticate * or WWW-Authenticate for PGP authentication scheme. */ struct pjsip_pgp_challenge { pj_str_t realm; /**< Realm for the challenge. */ pjsip_param other_param; /**< Other parameters. */ pj_str_t version; /**< PGP version. */ pj_str_t micalgorithm; /**< micalgorithm parameter. */ pj_str_t pubalgorithm; /**< pubalgorithm parameter. */ pj_str_t nonce; /**< Nonce challenge. */ }; /** * @see pjsip_pgp_challenge */ typedef struct pjsip_pgp_challenge pjsip_pgp_challenge; /** * This structure describe SIP WWW-Authenticate header (Proxy-Authenticate * header also uses the same structure). */ struct pjsip_www_authenticate_hdr { /** Standard header fields. */ PJSIP_DECL_HDR_MEMBER(struct pjsip_www_authenticate_hdr); /** Authentication scheme */ pj_str_t scheme; /** This union contains structures that are only relevant depending on the value of the scheme being used. */ union { pjsip_common_challenge common; /**< Common fields. */ pjsip_digest_challenge digest; /**< Digest challenge. */ pjsip_pgp_challenge pgp; /**< PGP challenge. */ } challenge; }; /** * WWW-Authenticate header. */ typedef struct pjsip_www_authenticate_hdr pjsip_www_authenticate_hdr; /** * Proxy-Authenticate header. */ typedef struct pjsip_www_authenticate_hdr pjsip_proxy_authenticate_hdr; /** * Create SIP WWW-Authenticate header. * * @param pool Pool where memory will be allocated from. * @return SIP WWW-Authenticate header. */ PJ_DECL(pjsip_www_authenticate_hdr*) pjsip_www_authenticate_hdr_create(pj_pool_t *pool); /** * Create SIP Proxy-Authenticate header. * * @param pool Pool where memory will be allocated from. * @return SIP Proxy-Authenticate header. */ PJ_DECL(pjsip_proxy_authenticate_hdr*) pjsip_proxy_authenticate_hdr_create(pj_pool_t *pool); /** * @} */ PJ_END_DECL #endif /* __PJSIP_AUTH_SIP_AUTH_MSG_H__ */