blob: 1c565f33ba509e25a735d9ea8c999fc9435b9649 [file] [log] [blame]
/* $Id$ */
/*
* Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
* Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
*
* 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 <pjsip/sip_msg.h>
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__ */