diff options
Diffstat (limited to 'pjsip/include/pjsua2/types.hpp')
-rw-r--r-- | pjsip/include/pjsua2/types.hpp | 266 |
1 files changed, 266 insertions, 0 deletions
diff --git a/pjsip/include/pjsua2/types.hpp b/pjsip/include/pjsua2/types.hpp new file mode 100644 index 00000000..129ac4a6 --- /dev/null +++ b/pjsip/include/pjsua2/types.hpp @@ -0,0 +1,266 @@ +/* $Id$ */ +/* + * Copyright (C) 2013 Teluu Inc. (http://www.teluu.com) + * + * 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 __PJSUA2_TYPES_HPP__ +#define __PJSUA2_TYPES_HPP__ + +#ifdef _MSC_VER +# pragma warning( disable : 4290 ) // exception spec ignored +# pragma warning( disable : 4512 ) // can't generate assignment op +#endif + +/** + * @file pjsua2/types.hpp + * @brief PJSUA2 Base Types + */ +#include <pjsua2/config.hpp> + +#include <string> +#include <vector> + +/** PJSUA2 API is inside pj namespace */ +namespace pj +{ + +/** + * @defgroup PJSUA2_TYPES General Data Structure + * @ingroup PJSUA2_DS + * @{ + */ + +using std::string; +using std::vector; + +/** Array of strings */ +typedef std::vector<std::string> StringVector; + +/** Array of integers */ +typedef std::vector<int> IntVector; + +/** + * Type of token, i.e. arbitrary application user data + */ +typedef void *Token; + +/** + * Socket address, encoded as string. The socket address contains host + * and port number in "host[:port]" format. The host part may contain + * hostname, domain name, IPv4 or IPv6 address. For IPv6 address, the + * address will be enclosed with square brackets, e.g. "[::1]:5060". + */ +typedef string SocketAddress; + +/** + * Transport ID is an integer. + */ +typedef int TransportId; + +/** + * Transport handle, corresponds to pjsip_transport instance. + */ +typedef void *TransportHandle; + +/** + * Timer entry, corresponds to pj_timer_entry + */ +typedef void *TimerEntry; + +/** + * Generic data + */ +typedef void *GenericData; + +/* + * Forward declaration of Account and Call to be used + * by Endpoint. + */ +class Account; +class Call; + + +/** + * Constants + */ +enum +{ + /** Invalid ID, equal to PJSUA_INVALID_ID */ + INVALID_ID = -1, + + /** Success, equal to PJ_SUCCESS */ + SUCCESS = 0 +}; + +////////////////////////////////////////////////////////////////////////////// + +/** + * This structure contains information about an error that is thrown + * as an exception. + */ +struct Error +{ + /** The error code. */ + pj_status_t status; + + /** The PJSUA API operation that throws the error. */ + string title; + + /** The error message */ + string reason; + + /** The PJSUA source file that throws the error */ + string srcFile; + + /** The line number of PJSUA source file that throws the error */ + int srcLine; + + /** Build error string. */ + string info(bool multi_line=false) const; + + /** Default constructor */ + Error(); + + /** + * Construct an Error instance from the specified parameters. If + * \a prm_reason is empty, it will be filled with the error description + * for the status code. + */ + Error(pj_status_t prm_status, + const string &prm_title, + const string &prm_reason, + const string &prm_src_file, + int prm_src_line); +}; + + +/* + * Error utilities. + */ +#if PJSUA2_ERROR_HAS_EXTRA_INFO +# define PJSUA2_RAISE_ERROR(status) \ + PJSUA2_RAISE_ERROR2(status, __FUNCTION__) + +# define PJSUA2_RAISE_ERROR2(status,op) \ + PJSUA2_RAISE_ERROR3(status, op, string()) + +# define PJSUA2_RAISE_ERROR3(status,op,txt) \ + do { \ + Error err_ = Error(status, op, txt, __FILE__, __LINE__); \ + PJ_LOG(1,(THIS_FILE, "%s", err_.info().c_str())); \ + throw err_; \ + } while (0) + +#else + /** Raise Error exception */ +# define PJSUA2_RAISE_ERROR(status) \ + PJSUA2_RAISE_ERROR2(status, string()) + +/** Raise Error exception */ +# define PJSUA2_RAISE_ERROR2(status,op) \ + PJSUA2_RAISE_ERROR3(status, op, string()) + +/** Raise Error exception */ +# define PJSUA2_RAISE_ERROR3(status,op,txt) \ + do { \ + Error err_ = Error(status, op, txt, string(), 0); \ + PJ_LOG(1,(THIS_FILE, "%s", err_.info().c_str())); \ + throw err_; \ + } while (0) + +#endif + +/** Raise Error exception if the expression fails */ +#define PJSUA2_CHECK_RAISE_ERROR2(status, op) \ + do { \ + if (status != PJ_SUCCESS) { \ + PJSUA2_RAISE_ERROR2(status, op); \ + } \ + } while (0) + +/** Raise Error exception if the status fails */ +#define PJSUA2_CHECK_RAISE_ERROR(status) \ + PJSUA2_CHECK_RAISE_ERROR2(status, "") + +/** Raise Error exception if the expression fails */ +#define PJSUA2_CHECK_EXPR(expr) \ + do { \ + pj_status_t the_status = expr; \ + PJSUA2_CHECK_RAISE_ERROR2(the_status, #expr); \ + } while (0) + +////////////////////////////////////////////////////////////////////////////// +/** + * Version information. + */ +struct Version +{ + /** Major number */ + int major; + + /** Minor number */ + int minor; + + /** Additional revision number */ + int rev; + + /** Version suffix (e.g. "-svn") */ + string suffix; + + /** The full version info (e.g. "2.1.0-svn") */ + string full; + + /** + * PJLIB version number as three bytes with the following format: + * 0xMMIIRR00, where MM: major number, II: minor number, RR: revision + * number, 00: always zero for now. + */ + unsigned numeric; +}; + +////////////////////////////////////////////////////////////////////////////// + +/** + * Representation of time value. + */ +struct TimeValue +{ + /** + * The seconds part of the time. + */ + long sec; + + /** + * The miliseconds fraction of the time. + */ + long msec; + +public: + /** + * Convert from pjsip + */ + void fromPj(const pj_time_val &prm); +}; + +/** + * @} PJSUA2 + */ + +} // namespace pj + + + +#endif /* __PJSUA2_TYPES_HPP__ */ |